Nimm `\raggedright` anstatt `\flushleft`. Letzteren Befehl gibt es nur indirekt: er wird aufgerufen, wenn man die _Umgebung_ `\begin{flushleft}` aufruft. Du siehst denselben vertikalen Weißraum, den die Umgebung auch einfügt.
Mit `\raggedright` erfolgt übrigens keine Worttrennung mehr. Wenn man die im Flattersatz dennoch möchte, kann man das Paket [`ragged2e`](http://www.ctan.org/pkg/ragged2e) laden und statt dessen `\RaggedRight` verwenden (Dank an @Mico für die Erinnerung).
Erinnerung). Es hätte außerdem den Vorteil, dass man sich `\arraybackslash` sparen könnte (Danke an @Herbert für den Hinweis), dazu gleich mehr.
Eine Bemerkung zur Definition des Spaltentyps `Z` (und Dank an @saputello für die Erinnerung):
\newcolumntype{Z}{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}X}
Da die Anweisungen `\raggedright`, `\raggedleft` und `\centering` den Befehl `\\` umdefinieren, funktioniert er nicht mehr als Ende einer Tabellenzeile, wenn man z.B.
\newcolumntype{Z}{>{\raggedright}X}
verwenden würde und man müsste dann eine Tabellenzeile mit `\tabularnewline` einleiten. Da das unbequem ist, verwendet man oft
\newcolumntype{Z}{>{\raggedright\arraybackslash}X}
`\arraybackslash` stellt die Tabellenfunktion von `\\` wieder bereit. In der vorliegenden Definition wird außerdem die von `\raggedright`, `\raggedleft` bzw. `\centering` vorgenommene Definition in `\newline` gespeichert, bevor es durch `\arraybackslash` wieder die Tabellenbedeutung erhält, damit man in der entsprechenden Tabellenzelle immer noch eine neue Zeile beginnen kann:
\newcolumntype{Z}{>{\raggedright\let\newline\\\arraybackslash}X}
Das `\hspace{0pt}` soll wohl Trennung des ersten Worts in der Tabelle ermöglichen, siehe [Warum passiert in dieser Tabellen-Zelle keine Silbentrennung?](http://texwelt.de/wissen/fragen/97/warum-passiert-in-dieser-tabellen-zelle-keine-silbentrennung)