Если у вас нет серьезных опасений по поводу производительности, это похоже на то, что следует обрабатывать на уровне пользовательского интерфейса, а не в вашем коде доступа к данным.
У меня сложилось впечатление, что вы берете результаты этого запроса и привязываетесь к сетке или списку с автоматически сгенерированными столбцами. Однако намного проще (и безопаснее) контролировать, какие столбцы видны в сетке, чем динамически создавать запрос SQL SELECT. Автоматически сгенерированные столбцы действительно подходят только для сценариев лесов.
Еще одна веская причина, по которой я бы не рекомендовал делать то, что вы делаете, заключается в том, что каждый раз, когда ваш конечный пользователь решает скрыть (или повторно показать) другой столбец, вы вынуждены повторно выполнять весь свой запрос. Это почти наверняка не то, что вы действительно хотите.
Я бы просто выделил все столбцы, которые могли бы быть доступными, и скрыл бы те, которые не должны быть доступными, как часть кода пользовательского интерфейса.