Das geht schon mit `m`-Spalten, man muss sie nur konsequent einsetzen:
\documentclass{article}
\usepackage{array}
\begin{document}
\begin{tabular}{m{2cm}m{1cm}c}
\hline
Besonders viel Text in einer Zelle & wenig Text & Text \\
\hline
\end{tabular}
\end{document}
![Ergebnis][1]
Um zu verstehen, was da passiert, muss man wissen, dass die Zentrierung immer relativ zur aktuellen Grundlinie erfolgt. Die Grundlinie wird in diesem Fall durch die `c`-Spalte vorgegeben. Die erste Spalte und die zweite werden nun relativ dazu zentriert. Letztlich ist das die Ausrichtung von Boxen mit `\parbox` ohne Höhenangabe. Eine `t` ausgerichtete `\parbox` wird mit ihrer obersten inneren Grundlinie auf der äußeren Grundlinie ausgerichtet. Genau das wird bei `p`-Spalten verwendet. Eine `b` ausgerichtete `\parbox` wird mit ihrer untersten inneren Grundlinie auf der äußeren Grundlinie ausgerichtet. Das wird bei `b`-Spalten verwendet. Eine `c` ausgerichtete bzw. jede nicht `t` oder `b` ausgerichtete `\parbox` wird relativ zur äußeren Grundlinie vertikal zentriert.
Wenn man nun also eine `t` ausgerichtete `\parbox` neben eine `b` ausgerichtete `\parbox` setzt, dann liegt die oberste innere Grundlinie der `t` ausgerichteten `\parbox` auf der Höhe der untersten inneren Grundlinie der `b` ausgerichteten `\parbox`. Die `t` ausgerichtete `\parbox` liegt also tiefer als die `b` ausgerichtete. Ebenso ist es mit einer `p`-Spalte im Vergleich zu einer `b`-Spalte:
\documentclass{article}
\usepackage{array}
\newcommand*{\blindtext}{Mir reichen drei bis vier Zeilen, um die Ausrichtung
zu verdeutlichen. Dabei ist es sogar von Vorteil, wenn die Zellen gleich
viel Text enthalten.}
\begin{document}
\noindent
\begin{tabular}{@{}p{.5\linewidth}@{}b{.5\linewidth}@{}}
\blindtext & \blindtext\\
\end{tabular}
\end{document}
![p-Spalte links, m-Spalte rechts][2]
Eine zentrierte `\parbox` oder eben eine `m`-Spalte wird zur Grundlinie zentriert. Steht eine `t`-ausgerichtete `\parbox` oder eine `p`-Spalte daneben, so ist jene mit der oberen inneren Grundlinie an der Grundlinie ausgerichtet. Damit steht die `m`-Spalte potentiell höher:
\documentclass{article}
\usepackage{array}
\newcommand*{\blindtext}{Mir reichen drei bis vier Zeilen, um die Ausrichtung
zu verdeutlichen. Dabei ist es sogar von Vorteil, wenn die Zellen gleich
viel Text enthalten.}
\begin{document}
\noindent
\begin{tabular}{@{}p{.5\linewidth}@{}m{.5\linewidth}@{}}
\blindtext & \blindtext\\
\end{tabular}
\end{document}
![p-Spalte links, m-Spalte rechts][3]
Ist steht eine `b` ausgerichtete `\parbox` oder eben eine `b`-Spalte neben einer zentrierten `\parbox` bzw. neben einer `m`-Spalte, so die `b` ausgerichtete `\parbox` bzw. `b`-Spalte mit ihrer unteren Grundlinie auf jener äußeren Grundlinie ausgerichtet, zu der die zentrierte `\parbox` bzw. `m`-Spalte zentriert wird. Damit ist die zentrierte `\parbox` oder `m`-Spalte potentiell tiefer:
\documentclass{article}
\usepackage{array}
\newcommand*{\blindtext}{Mir reichen drei bis vier Zeilen, um die Ausrichtung
zu verdeutlichen. Dabei ist es sogar von Vorteil, wenn die Zellen gleich
viel Text enthalten.}
\begin{document}
\noindent
\begin{tabular}{@{}b{.5\linewidth}@{}m{.5\linewidth}@{}}
\blindtext & \blindtext\\
\end{tabular}
\end{document}
![b-Spalte links, m-Spalte rechts][4]
Der Effekt ist also keineswegs so, dass `b`-Spalten tief stehen, `t`-Spalten hoch und `m`-Spalten zu allem zentriert sind. Entscheidend ist immer die der Bezugspunkt sowohl innerhalb als auch außerhalb der Box bzw. der Zelle. Dadurch muss man ggf. ein wenig um die Ecke denken, wenn man mehrere Boxen oder Spalten unterschiedlich zueinander ausrichten will.
Spalten der Typen `t`, `l`, `r` oder `c` sind übrigens immer einzeilig (außer man packt eine `\parbox` hinein) und werden immer mit ihrer Grundlinie auf der äußeren Grundlinie ausgerichtet. Damit kann man sie wie im obersten Beispiel ersichtlich leicht als Indikator für die Grundlinie verwenden.
Die Zellenhöhe auszumessen würde im übrigen erste einmal nichts nützen, da jede Zelle für sich nur so hoch und tief wie ihr Inhalt ist. Die Tabellenzeile ist dann so hoch und tief wie die höchste bzw. tiefste Zelle. Aber diese Information steht erst zur Verfügung, wenn die Zelle bereits gesetzt ist. Erst wenn man weiß, wie hoch und tief die höchste und die tiefste Zelle sind (das müssten übrigens nicht dieselben Zellen sein), könnte man alle Zellen durch explizite Boxen gleich hoch machen und dann das Material innerhalb dieser Boxen ausrichten. Das ist aber etwas anderes als die Ausrichtung der Boxen selbst, die man über den Spaltentyp einstellt.
Abschließend sei auch noch darauf hingewiesen, dass eine Zeile, eine `\parbox` und natürlich auch eine Tabellenzelle nicht zwingend genauso hoch wie tief ist. Da die zentrierte Ausrichtung die Mitte der Box oder Tabellenzelle und nicht etwa die mittlere Zeile der Box oder Tabellenzelle an der Grundlinie ausrichtet, kann daher bereits eine zentrierte `\parbox` mit nur einer Zeile gegenüber der Grundlinie verschoben sein:
\documentclass{article}
\begin{document}
Test\parbox{2em}{Test}
\end{document}
![Verschiebung][5]
Das hängt aber stark vom Inhalt ab. `c` ausgerichtete Boxen bzw. `m`-Spalten unterscheiden sich diesbezüglich also stark von `t` oder `b` ausgerichteten Boxen bzw. `p`- oder `b`-Spalten, bei denen die Grundlinie der obersten bzw. untersten Zeile an der aktuellen Grundlinie ausgerichtet wird.
Da in einem Kommentar danach gefragt wurde, sei darauf hingewiesen, dass man für `X`-Spalten des Pakets [`tabularx`][6] den zugrundeliegenden Spaltentyp über `\tabularxcolumn` einstellen kann. Soweit ich weiß, kann man den Typ aber nicht innerhalb einer Tabelle wechseln. Näheres ist der recht kurzen Anleitung zu dem Paket zu entnehmen.
[1]: http://i.imgur.com/H39CGc9.png
[2]: http://i.imgur.com/vUSNoj5.png
[3]: http://i.imgur.com/uNYaLFw.png
[4]: http://i.imgur.com/f2SDAMK.png
[5]: http://texwelt.de/wissen/upfiles/test5_3.png
[6]: http://www.ctan.org/pkg/tabularx