You don't have to use bit-shifting (although that is probably the most efficient way of doing it).
For your 12-digit BCD number, provided there won't be any overflow, assume that b[5] through b[0] holds your bytes from most significant to least significant, and that mod is the modulus (remainder) operation and div is integer division, the following pseudo-code would multiply by 10:
for i = 5 to 1
b[i] = (b[i] mod 16) * 16 + b[i-1] div 16
b[0] = (b[0] mod 16) * 16
To be honest, that's probably uglier than your bit-shifting solution but, as long as you encapsulate either of them in a function, it shouldn't really matter.
I would suggest having a function along the lines of:
BcdArray mult10 (BcdArray ba, int shiftAmt);
which would return a modified array by applying that power of 10.
Any even power of ten is a simple copy of bytes (since two nybbles is a byte) whilst only the odd powers of ten would need the tricky bit-shifting or remainder/division code.