Das sind eigentlich zwei verschiedene Fragen, wobei die erste eher ein Duplikat zu anderen Fragen ist.
## Antwort zu Teilfrage 1 ##
Die Wirkungsweise der `p`, `m` und `b` Spalten hat @saputello ausführlich unter [Wie kann ich innerhalb einer Tabellenzelle vertikal zentrieren?][1] erklärt.
In Deinem ersten Beispiel haben die erste und die letzte Zeile des Inhaltes der `m`-Spalte eine unterschiedliche Gesamthöhe, weshalb sich die mittlere Zeile nicht genau in deren vertikaler Mitte befindet. Das kannst Du ändern, in dem Du am Anfang und am Ende dieser Tabellenzelle ein [`\\strut`][2] einfügst, dass bei `tabu`-Zellen fehlt. Siehe dazu auch [Tabelle mit tabu: Warum verrutschen die Zelleninhalte?][3]
\documentclass[12pt,a4paper,oneside,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}
\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X[p]|X[m]|X[b]}
\hline text which is considerably longer than the width of the column &
\strut{}text \strut text which is considerably longer than the width of the column\strut &
text which is considerably longer than the width of the column\\
\hline
\end{tabu}
\end{document}
![alt text][4]
## Antwort zu Teilfrage 2 ##
In Deinem zweiten Beispiel befinden sich die erste Zeile der `p`-Spalte und die letzte Zeile der `b`-Spalte wieder auf der gleichen Tabellenzeilen-Grundlinie. Allerdings ist die erste Zeile der `p`-Spalte durch die `\rule` eben 5cm hoch. Der Inhalt der `m` Spalte wird dann vertikal an der der an der Grundlinienzeile zentriert. Ersetze in Deinem Beispiel XXX durch ppp und Du wirst sehen, dass diese in der `m`-Spalte weiter oben stehen als in der `b`-Spalte.
Da Du die Zeilenhöhe mit 5cm vorgeben möchtest, kannst Du das gewünschte aber durch eine `minipage` oder `\parbox` mit der Höhe 5cm und entsprechender innerer Ausrichtung in den einzelnen Zellen erreichen.
\documentclass[12pt,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}
\newcommand\mycell[3]{%
\parbox[c][#1][#2]{\linewidth}{\centering#3}}
\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X|X|X}
\hline
\mycell{5cm}{b}{XXX} &
\mycell{5cm}{c}{XXX} &
\mycell{5cm}{t}{XXX}\\
\hline
\end{tabu}
\end{document}
![alt text][5]
[1]: http://texwelt.de/wissen/fragen/840/wie-kann-ich-innerhalb-einer-tabellenzelle-vertikal-zentrieren/842
[2]: http://texwelt.de/wissen/fragen/1315/was-macht-der-befehl-strut
[3]: http://texwelt.de/wissen/fragen/4865/tabelle-mit-tabu-warum-verrutschen-die-zelleninhalte/4869
[4]: http://texwelt.de/wissen/upfiles/pmb_1.png
[5]: http://texwelt.de/wissen/upfiles/tabuparbox_1.png