Quizás alterando la estructura de la tabla añadiendo/eliminando columnas.
Imagino que te refieres a:
Cita: Nombre alumno | col 1 | col 2 | col 3 | col 4
Y que cada una de las columnas "col" se puede eliminar y añadir otra nueva (El problema de esto es que el nombre que le quieras poner a la columna seria limitado).
También lo puedes hacer como tu dices, por ejemplo teniendo ademas de la tabla de alumnos, otra tabla llamada "columnas", y ahí guardar los nombres de las columnas. Quizás en otra tabla columnas_valores es donde guardas los valores de esas columnas:
Cita: id_alumno, id_columna, valor
Y luego con un while mostrar los alumnos, y con cada alumno sus respectivas columnas. Vamos, solo es una idea, solo hay que calentarse un poco la cabeza.