Este es un problema difícil, porque CONTAINSTABLE solo puede buscar en el índice FTS de una sola tabla a la vez. Su solución UNION anterior está bien siempre que su rendimiento sea aceptable.
Enfrentamos el mismo problema de necesitar buscar eficientemente muchas columnas de muchas tablas en una sola consulta. Lo que hicimos fue agregar todos los datos de estas columnas y tablas en una sola tabla de solo lectura. Nuestra consulta solo necesitaba una única llamada CONTAINSTABLE
CONTAINSTABLE(AggregatedTable, AggregatedColumn, @FtsQuery)
Tenemos un trabajo programado que se ejecuta cada 5 a 10 minutos y agrega gradualmente cualquier contenido modificado de nuestra tabla de origen en nuestra única tabla de contenido agregado de solo lectura.
En general, parece que el uso de FTS en cualquier base de datos de tamaño razonable y carga de usuarios significa que siempre está luchando con el rendimiento. Si descubre que no importa lo que haga, no puede lograr que el rendimiento sea aceptable, es posible que deba investigar otras tecnologías como Lucene .