↑ for(tmp=num;tmp>0;tmp /= 10) *p++;

itoa高速にするなら

for(tmp=num;tmp>0;tmp /= 10) *p++;

の処理は

 *p += log( num ) + 1;

log(1) = 0
log(5) = 0.69897
log(10) = 1
log(50) = 1.69897
log(100) = 2
log(500) = 2.69897
log(1000) = 3
log(5000) = 3.69897
log(10000) = 4
log(50000) = 4.69897
log(100000) = 5

という感じです。
高速化するならこの辺りを物理演算ボードにまかすw


もっと速いのは stdlib.h に定義されてる itoaですが。