So does this mean using biginteger for small numbers could require almost 30x more memory?
A more standard approach when using doubles would be to use base 2^32. This is important if you want to implement a Schoenhage-Strassen FFT, which certainly makes use of the fact that the base is a power of 2.
Of course, it would be more efficient to use a power of two, but using a power of 10 makes converting back and forth between strings (in decimal) quite a bit faster. In my original use case that was a large factor, so it's what I went with.
Of course you can also multiply 32 x 32 -> 64 bits in Javascript. But of course you need more than one operation to do it.