Is there a robust way to align the baseline of subscripts?

The common approach here is to use a \vphantom of the larger object, or \smash the larger next to a \vphantom of the smaller:

enter image description here

\documentclass{article}

\begin{document}

$T_a T_b$ vs 
  $T_a T_{\dot{b}}$ vs
  $T_{\vphantom{\dot{b}}a} T_{\dot{b}}$ vs
  $T_a T_{\vphantom{a}\smash{\dot{b}}}$

\end{document}

Borrowing from Hendrik's answer here: Redefine underscore to produce roman subscript without breaking file names

NOT recommended!

\documentclass{article}

\begingroup
  \catcode`\_=\active
  \gdef_#1{\ensuremath{\sb{\smash{#1}}}}
\endgroup
\mathcode`\_=\string"8000
\catcode`\_=12

\begin{document}
$T_a T_b$ vs $T_a T_{\dot b}.$
\end{document}

enter image description here

If one wanted the subscripts universally lower, a variation of the suggestion of NoWayHaze would be this:

\documentclass{article}

\begingroup
  \catcode`\_=\active
  \gdef_#1{\ensuremath{\sb{\strut#1}}}
\endgroup
\mathcode`\_=\string"8000
\catcode`\_=12

\begin{document}
$T_a T_b$ vs $T_a T_{\dot b}.$
\end{document}

enter image description here


As an alternative, you could sacrifice another character, here a !, to specifically mean a subscript in which the height of the element is ignored. Then, you can still use _ in the normal cases.

\documentclass{article}

\begingroup
  \catcode`\!=\active
  \gdef!#1{\ensuremath{\sb{\smash{#1}}}}
\endgroup
\mathcode`\!=\string"8000
\catcode`\!=12

\begin{document}
$T_a T_{\dot b}.$ vs $T_a T!{\dot b}.$
\end{document}

enter image description here