Das ganze funktioniert sehr einfach, wenn man nicht darauf besteht, die `p-Spalten` beizubehalten:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}% Geändert, da die Lösung so einfacher ist.
\begin{document}
\begin{tabularx}{\textwidth}{XXX}% Geändert, da die Lösung so einfacher ist.
\textbf{Erste}&\textbf{Zweite}&\textbf{Dritte}\\ \endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&2000000000000000000&300\\
100&2000000000000000000&300\\
\end{tabularx}% Geändert.
\end{document}
Auch eine Mindestbreite der Spalten ist dabei erreichbar, beispielsweise mit:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}% Geändert, da die Lösung so einfacher ist.
\begin{document}
\begin{tabularx}{\textwidth}{XXX}% Geändert, da die Lösung so einfacher ist.
\makebox[2cm][l]{\textbf{Erste}}&\makebox[2cm][l]{\textbf{Zweite}}&\makebox[2cm][l]{\textbf{Dritte}}\\% Geändert für die Mindestbreite
\endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&2000000000000000000&300\\
100&2000000000000000000&300\\
\end{tabularx}% Geändert.
\end{document}
oder:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}% Geändert, da die Lösung so einfacher ist.
\begin{document}
\begin{tabularx}{\textwidth}{XXX}% Geändert, da die Lösung so einfacher ist.
\multicolumn1{p{2cm}}{\textbf{Erste}} & % Geändert für die Mindestbreite
\multicolumn1{p{2cm}}{\textbf{Zweite}} & % -"-
\multicolumn1{p{2cm}}{\textbf{Dritte}} \\ % -"-
\endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&2000000000000000000&300\\
100&2000000000000000000&300\\
\end{tabularx}% Geändert.
\end{document}
Ich gebe natürlich zu, dass das nicht die Frage beantwortet, da ich eben die `p`-Spalten entgegen der Vorgabe durch `X`-Spalten und `longtable` durch das davon abgeleitete `ltablex` ersetzt habe.
Will man das ganze unbedingt mit `p`-Spalten machen, dann muss man sich eben in `ltablex` anschauen, wie das dort funktioniert, um es für `longtable` und `p`-Spalten nachzubauen. Oder man muss den Inhalt, der die Breite bestimmten soll, beispielsweise mit `\settowidth` oder `\widthof` (letzteres benötigt [`calc`](http://ctan.org/pkg/calc)) ausmessen und über die `aux`-Datei für den nächsten Lauf sichern. Man möge mir nachsehen, dass ich statt einer solch aufwändigen, dogmatischen, lieber eine einfache, pragmatische Lösung gezeigt habe.
Auf der anderen Seite ist es vielleicht doch eine Antwort, denn genau genommen sind `X`-Spalten ja ebenfalls `p`-Spalten, die aber um die zusätzliche Funktion der automatischen Breitenanpassung erweitert wurden. Bei `ltablex` ist dabei die Breite im Gegensatz zu `tabularx` oder `ltxtable` auch von der natürlichen Breite des Inhalts abhängig. Man kann daher in solchen Spalten insbesondere auch einen automatischen oder manuellen Umbruch haben. Hier einmal manuell:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ragged2e,ltablex}% Geändert, da die Lösung so einfacher ist.
\begin{document}
\begin{tabularx}{\textwidth}{X>{\RaggedRight}XX}% Geändert, da die Lösung so einfacher ist.
\multicolumn1{p{2cm}}{\textbf{Erste}} & % Geändert für die Mindestbreite
\multicolumn1{p{2cm}}{\textbf{Zweite}} & % -"-
\multicolumn1{p{2cm}}{\textbf{Dritte}} \\ % -"-
\endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&2000000000000000000\\42&300\\
100&2000000000000000000&300\\
\end{tabularx}% Geändert.
\end{document}
Hier automatisch:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}% Geändert, da die Lösung so einfacher ist.
\usepackage{mwe}% Eingefügt für den Fülltext des automatischen Umbruchs.
\begin{document}
\begin{tabularx}{\textwidth}{XXX}% Geändert, da die Lösung so einfacher ist.
\multicolumn1{p{2cm}}{\textbf{Erste}} & % Geändert für die Mindestbreite
\multicolumn1{p{2cm}}{\textbf{Zweite}} & % -"-
\multicolumn1{p{2cm}}{\textbf{Dritte}} \\ % -"-
\endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&2000000000000000000&300\\
100&\blindtext&300\\% Geändert zur Demonstration des automatischen Umbruchs
\end{tabularx}% Geändert.
\end{document}
Man kann das auch noch mit dem Paket [`environ`](http://www.ctan.org/pkg/environ) kombiniert. Dann kann man nämlich einen neuen Spaltentyp definieren, dessen Argument die Mindestbreite der Spalte ist. Um der Anforderung, dass eine `p`-Spalte verwendet werden soll, möglichst nahe zu kommen, nenne ich diesen neuen Spaltentyp `P`:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}
\usepackage{environ}
\makeatletter
\NewEnviron{mincolwidth}[1]{%
\setbox\@tempboxa\hbox{\BODY}%
\ifdim\wd\@tempboxa<#1
\hbox to #1{\BODY\hfil}%
\else
\BODY
\fi
}
\makeatother
\newcolumntype{P}[1]{>{\begin{mincolwidth}{#1}}X<{\end{mincolwidth}}}
\begin{document}
\begin{tabularx}{\textwidth}{p{2cm}P{2cm}p{2cm}}
\textbf{Erste}&\textbf{Zweite}&\textbf{Dritte}\\ \endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&200000000000000&300\\
100&200000000000000&300\\
\end{tabularx}
\end{document}
**Achtung:** Solche Spalten mit `environ`-Umgebung kann man nicht in der ersten oder der letzten Spalte verwenden. Für das Beispiel und die in der Frage genannte zweite Spalte, funktioniert es jedoch. Allerdings geht das auf Kosten der manuellen Umbrüche. Wollte man diese zusätzlich erlauben, müsste man noch einmal etwas mehr Aufwand investieren. Automatische Zeilenumbrüche funktionieren jedoch:
\documentclass[a4paper]{article}
\usepackage[german]{babel}% Geändert, da der Fragesteller offenbar alte Rechtschreibung bevorzugt.
\usepackage[utf8]{inputenc}
\usepackage{ltablex}
\usepackage{environ}
\makeatletter
\NewEnviron{mincolwidth}[1]{%
\setbox\@tempboxa\hbox{\BODY}%
\ifdim\wd\@tempboxa<#1
\hbox to #1{\BODY\hfil}%
\else
\BODY
\fi
}
\makeatother
\newcolumntype{P}[1]{>{\begin{mincolwidth}{#1}}X<{\end{mincolwidth}}}
\usepackage{mwe}
\begin{document}
\begin{tabularx}{\textwidth}{p{2cm}P{2cm}p{2cm}}
\textbf{Erste}&\textbf{Zweite}&\textbf{Dritte}\\ \endhead
A&B&C\\
100&200&300\\
100&200&300\\
100&\blindtext&300\\
100&200000000000000&300\\
\end{tabularx}
\end{document}