1. Все зависит от того, важна ли структура таблицы или важно лишь наличие столбцов. Если важна - проще скрытый лист с шаблоном шапки, с которым сравнивать.
2. Надо понимать, могут ли удаляться столбцы. Если да и при этом хочется использовать имена - надо в обязательном порядке проверять наличие каждого имени, а если при этом важна структура - см.п.1.(но тогда лучше вообще отказаться от имен. Почему? см.п.3

).
3. Надо точно понимать, можно ли опираться на сами Заголовки(т.е. текст названия). Если можно - проще сделать функцию поиска по названию - и быстро и практично. Ни перемещение, ни удаление столбцов не скажется на работе или это всегда можно обойти хотя бы выдачей сообщения, что такой-то столбец не найден. И даже простое добавление пользователем столбца не приведет к отказу работы программы.
Чем п.3 удобен: если есть именованный столбец и пользователь его удалил и получил сообщение "Не найден столбец такой-то", то первое желание будет добавить этот столбец. Но ведь имя-то безвозвратно удалено и программа все равно его не найдет. А это значит, что даже добавив столбец пользователь будет получить сообщение об его отсутствии, что, мягко говоря, его ввергнет его в легкое уныние

В своей практике применял все варианты. В зависимости от ситуации выбирается способ. Т.к. если важна структура таблицы(порядок столбцов) - то константы + шаблон на скрытом листе, с которым идет сравнение перед обработкой. Если порядок столбцов не важен и может меняться - либо именованные диапазоны по одной ячейке, либо поиск по наименованию(если имена не должны меняться).
Есть и другие варианты(хранение списка заголовков на отдельном листе, например), все перечислять не вижу смысла.
И да: если имен будет пара десятков - никак не отразится на производительности. Тем более если они будут "один диапазон - одна ячейка" и без всяких вычислений. Грузят как правило именованные диапазоны с вычислениями.