インライン・アセンブラなどを使わず高級言語の範囲でこれらを解決する策としては

桁上がり:
・最上位ビットを使わないでおいて桁上がりを検出する
 (一桁で表現できる数が半分の大きさになり若干総桁数が増加する)

乗算:
・一語の半分の桁数しか使わない
 (簡単だが桁数、つまり容量と全ての演算の速度が単純に倍になる)
・一語を半分づつに分けて計算して合わせる
 (ロジックが複雑になり速度が低下する、
 またターゲットCPUに整数乗算命令があってもそれがうまく使われない可能性がある)

…ということになりアセンブラとくらべて
本質的に(最適化のよしあしとは関係なく)速度効率的にはよろしくないことになる。

(このあたりはプリミティブ・レベルの話なので
いくらtemplateでgenerativeに頑張っても解消はしない。)