Como ya se mencionó, podría agregar un índice de contexto ctx a las columnas de nombre.
suponiendo que se actualice una pequeña cantidad de registros, una opción es actualizar su índice diariamente. (y registre cuándo sucedió)
luego agregue una columna de fecha de última actualización y un índice a la tabla que se está buscando.
Debería ser posible escanear su índice ctx para la mayoría de los datos antiguos sin cambios y seleccionar del pequeño porcentaje de datos actualizados usando el LIKE tradicional, por ejemplo:
WHERE (lastupdated<lastrefresh AND contains(name,'%ABC%'))
OR (lastupdated>lastrefresh AND name like '%ABC%')
NOTA:es posible que su plan de consulta se vuelva un poco loco (muchas conversiones de mapas de bits a ID de fila) en ese caso, divida las 2 partes de OR en una consulta UNION ALL.p. ej.
SELECT id FROM mytable
WHERE
(lastupdate>lastrefresh and name LIKE '%ABC%')
UNION ALL
SELECT id FROM mytable
WHERE lastupdate<lastrefresh and CONTAINS(name, '%ABC%', 1) > 0