豊福です。

  後ろの zero が連なっている部分の処理を省きます。
Bignum#to_s の基数が2のべき乗のときに非常に効果があります。
(もっとも rb_big2str0 で基数が2のべき乗のときを別処理にすれば
さらに激速になるはずですが)
基数が10のときもそこそこ効果あります。

--- bignum.c.org
+++ bignum.c
@@ -1633,19 +1633,20 @@
 {
     struct big_div_struct *bds = (struct big_div_struct*)ptr;
     long nx = bds->nx, ny = bds->ny;
-    long i, j;
+    long i, j, nyzero;
     BDIGIT *yds = bds->yds, *zds = bds->zds;
     BDIGIT_DBL t2;
     BDIGIT_DBL_SIGNED num;
     BDIGIT q;

     j = nx==ny?nx+1:nx;
+    for (nyzero = 0; !yds[nyzero]; nyzero++);
     do {
        if (bds->stop) return Qnil;
        if (zds[j] ==  yds[ny-1]) q = BIGRAD-1;
        else q = (BDIGIT)((BIGUP(zds[j]) + zds[j-1])/yds[ny-1]);
        if (q) {
-           i = 0; num = 0; t2 = 0;
+           i = nyzero; num = 0; t2 = 0;
            do {                        /* multiply and subtract */
                BDIGIT_DBL ee;
                t2 += (BDIGIT_DBL)yds[i] * q;

---