It definitely is possible, but the question is, if it is advisable. You can use reflection to achieve what you want
string concatenated = string.Empty;
for(int i = 1; i <= 5; i++)
{
var variableName = $"Name{i}";
var type = typeof(Names);
var property = type.GetProperty(name);
var value = property.GetValue(names);
concatenated += value;
}
Anyway, unless you have a very good reason to do this, I would avoid this. You are sacrificing the merits of a strong typing system for an improvement that is none.
Of course there are good reasons to use reflection, but I don't see the merits in this case.
You could concatenate the names by means of string interpolation
var concatenated = $"{names.Name1}{names.Name2}{names.Name3}{names.Name4}{names.Name5}";
The advantage is, that compiler time type checking is possible for that solution. You'll get immediate feedback, if you misspelled one of the properties, instead on runtime errors you might have to debug.
Furthermore is this solution way clearer and does not require the reader to think more than necessary. (Code is read much more often than it is written, so plan accordingly)
But if you have to code this way to achieve what you want, you should really start thinking about your design. What is the problem domain that justifies the Names
class and especially that concatenation?