A lo primero, sí. Tu muestras el listado de alumnos, y después de mostrar la celda del alumno tendrías otro while dentro para mostrar las columnas. Quizás hayan más formas de optimizar para evitar hacer una consulta mysql para cada while, como por ejemplo al mismo tiempo de seleccionar los datos del alumno, hacer un union con los datos de las columnas del alumno.
A lo segundo, tienes algunas sentencias que te devuelven los nombres. Yo creo que si se puede aunque no he trabajado nunca directamente sobre los nombres de las columnas:
Cita: SHOW COLUMNS FROM alumnos;