I would do like the following:
% arara: pdflatex
\documentclass{article}
\usepackage{amssymb}
\let\oldvec\vec
\renewcommand*{\vec}[1]{\mathbf{#1}}
\begin{document}
\[\vec{X}_1^\intercal\vec{X}_1^{\vphantom{\intercal}} \qquad \vec{X}_1^2\vec{X}_2^2\]
\end{document}

Update:
The OP asked for a solution without \vphantom{}. The other way around would be to raise the subscript up to the level of other subscripts. In this case, the \intercal would be colliding. You could the superscript up which would look bad in combination with no-subscript versions. Therefore, you will have to shift it to the right. Please see my example below for a possible solution. You can use my macro or you do a manual kerning for every case.
% arara: pdflatex
\documentclass{article}
\usepackage{amssymb}
\usepackage{mathtools}
\let\oldvec\vec
\renewcommand*{\vec}[1]{\mathbf{#1}}
\newcommand*{\myIntercal}[1]{_{#1}{}^{\mkern-4mu\intercal}}
\newcommand{\test}[1]{$\vec{X}^\intercal\vec{X}\myIntercal{#1}\vec{X}_{#1}\vec{x}^\intercal\vec{x}\myIntercal{#1}\vec{x}_{#1}$\par}
\begin{document}
\test{1}\test{2}\test{3}\test{4}\test{5}\test{l}\test{m}\test{1000}
\end{document}

newpxtextjust to see that it is not needed at all. Just as a hint. – LaRiFaRi Oct 07 '14 at 05:57