Можете использовать словарь. Словарь хранит связки ключ-значение (наименование - сила, в вашем случае)
Ключ должен быть уникальным (не повторяться)
При объявлении, указывается тип ключа и тип значения. Например, для Dictionary ключ будет строкой, а значение - целым числом
//создали словарь
Dictionary<string, int> Fists = new Dictionary<string, int>()
//наполнили
Fists["light"] = 10;
Fists["middle"] = 50;
Fists["hard"] = 100;
Fists["ult"] = 350;
//получаем значение
int fightPower = Fists["ult"];
Можно создать структуру, где будут поля Имя (наименование) и сила и использовать список (List)
Список - это как массив, только размер не нужно задавать и на лету значения можно легко удалять и добавлять
List<attack> Fists = new List<attack>()
Fists.Add(new Attack(){ Name = "light", Power = 10})
Fists.Add(new Attack(){ Name = "middle", Power = 50})
....
//получаем значение
int fightPower = Fists[0];
И на будущее. Про изменение размера массивов. Почитайте, есть статический класс Array и у него есть метод Resize(). Ему можно передать свой массив и произойдет изменение размера. Может, вам вообще такой вариант подойдет (хотя нет. его вообще никто не юзает)
UPD: потратьте время, изучите статью
https://msdn.microsoft.com/ru-ru/library/6tc79sx1(...
Потом не будет проблем с выбором коллекции