Grundsätzlich hat mysql eine variable Zeilenlänge, solange man die nicht auf Tabellenebene ändert. Leere Spalten verbrauchen also keinen Platz (naja, fast).
Bei Blobs oder Textspalten ist es jedoch möglicherweise besser, diese zu normalisieren, da diese möglicherweise große Datenmengen speichern und diese bei jedem Scannen einer Tabelle gelesen / übersprungen werden müssen. Selbst wenn die Spalte nicht in der Ergebnismenge enthalten ist und Sie Abfragen außerhalb eines Indexes durchführen, wird dies bei einer großen Anzahl von Zeilen einige Zeit in Anspruch nehmen.
Als gute Praxis denke ich, dass es schnell gehen wird, alle administrativen und häufig verwendeten Spalten in einer Tabelle zusammenzufassen und den Rest zu normalisieren. Eine Art "vertikales" Design wie in Ihrem zweiten Beispiel wird komplex zu lesen sein und sobald Sie mit temporären Tabellen arbeiten, werden Sie früher oder später auf Performance-Probleme stoßen.