Grayfox90, способности - это просто данные. Зачем им какие то свойства компонента - типа апдейта или эвейка.
Храните все в обычных классах с общим интерфейсом. Список текущих способностей - обычный List.
Adamos, еще на основе ответа res2001 крутится какая то оптимизация блоками.
Пока без конкретики, но попробую расписать. Допустим блоки по 5 знаков.
Искомая строка
00100 01111 02023 0000
По блокам записываем количество нулей 4125
И строка в базе пускай
00100 01111 12023 00300
по блокам - 4114
Естественно в базе эти данные заранее просчитаны, а не на этапе поиска.
Мне кажется если сначала сравнить совпадения вот так "по блокам" то можно еще больше заранее отсеять строк. Конечно оставшиеся строки придется "уточнять" полным перебором - но это одно из направлений оптимизации - заранее отсеять часть данных.
А может просто остальные плашки умерли