gotito,
todo parece estar bien, incluso tu consulta primera, la adecuada para lo que buscas, excepto la fecha, pues tienes un formato que me hace sospechar que no usas un campo DATE. Debes usar un campo para fecha, y no un campo de tipo varchar. Para un campo fecha debes insertar la fecha con el formato yyyy-mm-dd, por ej. 2009-07-25. Luego podrás trabajar con ella y extraer los datos como quieras, por meses, buscando por rango de fechas, etc.
Parecen también faltarte otros inner join en cada parte del union para unir con la tabla alumno y poder traerte nombre y apellidos y datos personales, y añadir la cadena que indique si se trata de ciclo o bachillerato, y el instituto porque imagino que quieres esos datos. He puesto en los dos SELECT los campos alumno.nombre y alumno.apellidos. Pon tú en su lugar los nombres que hayas dado.
Código SQL:
Ver original(SELECT
Id_microrrelato, Titulo, Texto, Idioma, Fecha, 'bachillerato' grupo, alumno.nombre, alumno.apellidos, instituto.nombre
FROM microrrelato
INNER JOIN alumno
ON microrrelato.Id_alu=alumno.Identificacion
INNER JOIN bachillerato
ON microrrelato.Id_alu=bachillerato.Identificacion
INNER JOIN instituto
ON bachillerato.Id_inst = instituto.Id_inst
WHERE microrrelato.Idioma='Castellano')
UNION ALL
(SELECT
Id_microrrelato, Titulo, Texto, Idioma, Fecha, 'ciclo', alumno.nombre, alumno.apellidos, instituto.nombre
FROM microrrelato
INNER JOIN alumno
ON microrrelato.Id_alu=alumno.Identificacion
INNER JOIN ciclo
ON microrrelato.Id_alu=ciclo.Identificacion
INNER JOIN instituto
ON ciclo.Id_inst = instituto.Id_inst
WHERE microrrelato.Idioma='Castellano')
ORDER BY Id_microrrelato DESC
Esto es lo que debes usar. Pruébalo directamente en consola o en phpmyadmin. Si funciona, y luego en PHP no, debes pedir ayuda en el foro PHP.