Por que agregas detras de $condicion ese "AND s1.webTitulo like '%$frase%'" ?
Fijate lo que estas haciendo
X or Y or Z and XYZ
eso se interpreta así X or Y or (Z and XYZ) luego claro que no te da los resultados que buscas...
Recuerda que 2+3*5=2+(3*5) pero es distinto de (2+3)*5 con los operadores logicos pasa lo mismo
X or Y or Z and XYZ=X or Y or (Z and XYZ) y distinto de (X or Y or Z) and XYZ
en tu caso NO te sirve ninguna de las dos (con o sin parentesis).
Debes filtrar por $condicionX para cada campo ... y nunca filtrar por la frase entera.
Tambien prodias ir al principio y usar el MATCH AGAINST pero en cada una de las subconsultas del union y sobre un solo campo.... eso te ahorraria los explode.... En mi primer post sobre el tema interprete que buscabas $frase como cadena no como palabras independientes.
En esa query que nos mandas vas a tener repeticiones puesto que apesar de que UNION es igual a UNION DISTINCT por el campo
priority siempre seran distintos....