Esa consulta tiene partes, no de datos si no de sintaxis que depende del valor de variables php, como no podemos saber su contenido dificilmente se te puede ayudar.
$SQL = "SELECT t1.id, t1.titulo, t1.intro, t1.direccion, t1.telefono, t1.mail, t1.web, t1.mail,
t1.atencion, t1.imagen, t1.detalle, t1.titulo_galeria,
GROUP_CONCAT(DISTINCT t3.rubro ORDER BY t3.rubros_id SEPARATOR ', ') AS rubros, t4.zona, t5.usuario, activar_telefono, activar_link_web
FROM comercios t1
INNER JOIN comercios_rubros t2 ON(t2.comercios_id = t1.id)
INNER JOIN rubros t3 ON(t3.id = t2.rubros_id
".$extr2."
)
INNER JOIN zonas t4 ON(t4.id = t1.zonas_id)
INNER JOIN s_usuarios t5 ON(t1.mail=t5.email)
WHERE 1
".$ext." ".$extz." ".$wh."
AND t1.estado = 'Y'
GROUP BY t1.id
ORDER BY 2 ASC
LIMIT ".$desde.",".$max_show.";";
Por otro lado no tiene sentido ordenar por una constante
ORDER BY 2 ASC
esa linea sobraria, excepto que pueda referirse a la segunda columna (?).
GROUP_CONCAT(
+
GROUP BY t1.id
Sabiendo es resultado esperado quizas se podria mejorar....
13.2.8.3. Index Hint Syntax
Ana liza USE INDEX quizas forzando el uso de algun indice pude que mejore....