Это полностью зависит от того, что представляют собой данные: насколько хорошо они индексируют (например, индекс по столбцу только с двумя значениями не очень вам поможет), какова вероятность их поиска и насколько они вероятны должны быть найдены на вместе .
В частности, если столбец A запрашивается много, а столбец B имеет тенденцию запрашиваться только при запросе столбца A, составной индекс (A, B) сделает запросы, которые ищут конкретные значения обоих столбцов очень быстро , а также дает вам преимущества единого индекса на А (но не на В) бесплатно.
Возможно, что один индекс на столбец имеет смысл для ваших данных, но, скорее всего, нет. Вероятно, будет лучший компромисс с учетом характера ваших данных и схемы.
Лично я бы не стал использовать хранимую процедуру для создания динамического SQL. Нет никакой выгоды в производительности по сравнению с выполнением этого на любом языке сценариев на стороне сервера, который вы используете в самом веб-приложении, и язык, на котором вы пишете веб-приложение, почти всегда будет иметь более гибкие, читаемые и безопасные функции обработки строк, чем SQL делает. Генерация строк SQL в самом SQL - это трудная задача; почти наверняка вы где-нибудь ошибетесь и получите дыру в безопасности SQL-инъекций.