Esto parece funcionar a partir de una prueba rápida que acabo de hacer y evita la necesidad de verificar la existencia de x=1
dos veces.
SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1
UNION ALL
SELECT *
FROM mytable
WHERE
FOUND_ROWS() = 0 AND x = 2;
Editar:siguiendo su aclaración a la pregunta, obviamente, las 2 consultas deberán ser compatibles con UNION para que funcione lo anterior.
La respuesta a su pregunta actualizada es No. Esto no es posible en una sola consulta. Tendría que usar algo de lógica de procedimiento condicional para ejecutar la consulta deseada.