No se va a acelerar jamás, en tanto uses LIKE... Es una de las peores cláusulas, destructoras de performance cuando la usas con comodines en ambos lados de la palabra:
Y esto sucede porque le estás diciendo que busque lo que
comience con cualquier cosa y
termine con cualquier cosa.
¿Y cómo logra encontrar eso?
Simple:
debe forzosamente leer toda la tabla y todos y cada uno de los registros. Es lo que se llama "full table scan", y se considera el peor escenario de una consulta, junto con el producto cartesiano.
¿Una solución?
Bueno, es un caso difícil, porque estás trabajando en BBDD con una matriz, en forma de VARCHAR... La verdad no estoy seguro de por donde empezar.
Yo lo plantearía de dos formas:
1) Si puedes separar todos los valores en columnas individuales, podrías usar
FIELD() para el WHERE
2) Si en lugar de usar asteriscos, usaras comas para separarlos, podrías usar
FIND_IN_SET():
También podrías usar
INSTR() o
LOCATE(), por ejemplo, pero son un poco menos eficientes para este caso.