Couldn't sleep last night...
It will work on attributed blocks, MText and Text. You have the options to sort from Top or Bottom, then Left or Right.
Hope this helps. 
Code:
(defun c:AutoInc (/ _x _y _gbn _ss2l _0 r ss i lat long)
;; Alan J. Thompson, 03.26.10
(vl-load-com)
(setq _x (lambda (e) (car (cdr (assoc 10 (entget e))))))
(setq _y (lambda (e) (cadr (cdr (assoc 10 (entget e))))))
(setq _gbn (lambda (L # / n g f)
(setq n -1)
(while (> (1- (length L)) n)
(repeat # (setq g (cons (nth (setq n (1+ n)) L) g)))
(setq f (cons (reverse g) f)
g nil
) ;_ setq
) ;_ while
(reverse f)
) ;_ lambda
) ;_ setq
(setq _ss2l (lambda (x / e i l)
(if (eq (type x) 'PICKSET)
(progn (setq i -1)
(while (setq e (ssname x (setq i (1+ i))))
(setq l (cons e l))
) ;_ while
l
) ;_ progn
) ;_ if
) ;_ lambda
) ;_ setq
(setq _0 (lambda (l) (vl-position (cdr (assoc 0 (entget x))) l)))
(or *AI:LR* (setq *AI:LR* "Right"))
(or *AI:TB* (setq *AI:TB* "Top"))
(cond
((and (setq r (getint "\nSpecify number of rows: "))
(not (initget 0 "Left Right"))
(setq *AI:LR* (cond
((getkword (strcat "\nSort from Left or Right? [Left/Right] <"
*AI:LR*
">: "
) ;_ strcat
) ;_ getkword
)
(*AI:LR*)
) ;_ cond
) ;_ setq
(not (initget 0 "Top Bottom"))
(setq *AI:TB* (cond
((getkword (strcat "\nSort from Top or Bottom? [Top/Bottom] <"
*AI:TB*
">: "
) ;_ strcat
) ;_ getkword
)
(*AI:TB*)
) ;_ cond
) ;_ setq
(setq ss (_ss2l (ssget "_:L"
'((-4 . "<OR")
(0 . "MTEXT,TEXT")
(-4 . "<AND")
(0 . "INSERT")
(66 . 1)
(-4 . "AND>")
(-4 . "OR>")
)
) ;_ ssget
) ;_ _ss2l
) ;_ setq
) ;_ and
(setq lat (if (eq *AI:LR* "Left")
<
>
) ;_ if
long (if (eq *AI:TB* "Top")
>
<
) ;_ if
) ;_ setq
(setq i 0)
(foreach x
(apply
(function append)
(mapcar
(function (lambda (l) (vl-sort l (function (lambda (a b) (long (_y a) (_y b)))))))
(mapcar (function (lambda (y) (vl-remove nil y)))
(_gbn (vl-sort ss (function (lambda (a b) (lat (_x a) (_x b))))) r)
) ;_ mapcar
) ;_ mapcar
) ;_ apply
(cond
((_0 '("MTEXT" "TEXT"))
(vl-catch-all-apply
(function vla-put-textstring)
(list (vlax-ename->vla-object x) (itoa (setq i (1+ i))))
) ;_ vl-catch-all-apply
)
((_0 '("INSERT"))
(vl-catch-all-apply
(function vla-put-textstring)
(list (car (vlax-invoke (vlax-ename->vla-object x) (function GetAttributes)))
(itoa (setq i (1+ i)))
) ;_ list
) ;_ vl-catch-all-apply
)
) ;_ cond
) ;_ foreach
) ;_ cond
) ;_ cond
(princ)
) ;_ defun