The height of the \parbox in the second table exceeds the height of the strut which makes the distance between baselines of texts of cells consisting of single lines of text. Therefore, this \parbox is not aligned so that the baseline of its first text line is level with the baselines of adjacent cells, but the upper boundary line of this \parbox abuts the lower boundary line of the box of the table-cell above it.
As long as you don't play with \arraystretch and/or \extrarowheight, you can prepend and append \struts to the content of the \parbox for ensuring proper height and depth:
\documentclass[12pt]{article}
\usepackage{tabularx}
\begin{document}
\begin{table}[h]
\begin{tabularx}{0.5\linewidth}{X r}
A row heading & 123 \\
A second row heading that is very long and will surely break & 456 \\
A third row heading & 789 \\
\end{tabularx}
\end{table}
\clearpage
\begin{table}[h]
\begin{tabularx}{0.5\linewidth}{X r}
A row heading & 123 \\
\parbox[b]{\hsize}{\strut A second row heading that is very long and will surely break\strut} & 456 \\
A third row heading & 789 \\
\end{tabularx}
\end{table}
\end{document}

A better approach might be loading the package array and defining a column-type for bottom-alignment—\TX@col@width is the width of X-columns:
\documentclass[12pt]{article}
\usepackage{tabularx, array}
\makeatletter
\newcolumntype{B}{b{\TX@col@width}}%
\makeatother
\begin{document}
\begin{table}[h]
\begin{tabularx}{0.5\linewidth}{X r}
A row heading & 123 \\
A second row heading that is very long and will surely break & 456 \\
A third row heading & 789 \\
\end{tabularx}
\end{table}
\clearpage
\begin{table}[h]
\begin{tabularx}{0.5\linewidth}{B r}
A row heading & 123 \\
A second row heading that is very long and will surely break & 456 \\
A third row heading & 789 \\
\end{tabularx}
\end{table}
\end{document}

[b]parbox just use an X column and configure it to use abcolumn – David Carlisle Aug 07 '21 at 20:22>and<functionality you mean? Wouldn’t that just ensure that the entire table displayed this vertical jump? – Fredrik P Aug 07 '21 at 20:40\renewcommand{\tabularxcolumn}[1]{b{#1}}before the table, see the tabularx doc. – David Carlisle Aug 07 '21 at 20:47