C # Действительно не поддерживает этот тип синтаксиса.
Поместите метки в некую структуру и используйте ее для манипулирования метками. Вот несколько примеров:
List<Label> labels = new List<Label>();
int i = /* some valid index (0 based) */
labels[i].visible = true;
Dictionary<string, Label> labelDict = new Dictionary<string, Label>();
labelDict.add("label1", label1);
labelDict["label1"].visible = true;
В качестве альтернативы вы можете получить метки из списка дочерних элементов родительской формы и установить видимость таким образом.