[Not a full answer but on the long side for comments.]
It is probably a formatting speed issue. Also note that obtaining the digits in base 10 also takes time (it's an O(n log n) algorithm for n the bit length of the number). One way to see that is as below. Notice that getting digits in base 2 is much faster (it's O(n)).
Table[{Timing[IntegerString[2^(10^n)];],
Timing[IntegerString[2^(10^n), 2];]}, {n, 5, 8}]
(* Out[158]= {{{0., Null}, {0., Null}}, {{0.028, Null}, {0.,
Null}}, {{0.396, Null}, {0.008, Null}}, {{6.924, Null}, {0.12,
Null}}} *)
I would expect that IntegerString
might format faster than printing the digits directly, but I'm too scared to try on my memory-limited machine.
As for sizes: the number will occupy an eight of a gig, since it is exactly a billion bits.
ee = 2^(10^9);
ByteCount[ee]
(* Out[14]= 125000080 *)
In decimal form, at one byte per character, it will be around 300Mb. This is computed more accurately by any of the means below.
Log[10., 2]*10^9
(* Out[20]= 3.01029995664*10^8 *)
Timing[eeString = IntegerString[ee];]
ByteCount[eeString]
StringLength[eeString]
(* Out[21]= {106.264, Null}
Out[22]= 301030064
Out[23]= 301029996 *)