こっちの方が速かった。
(mapconcat (lambda (x) "abc") (make-bool-vector 10000 nil) nil)

くり返し回数が十分大きい場合はこっちのが速い
(with-temp-buffer
(let* ((n 10000) (s "abc") (l nil))
(while (/= n 0)
(setq l (cons (= 1 (logand n 1)) l))
(setq n (lsh n -1)))
(while (progn (if (car l) (insert s)) (setq l (cdr l)))
(insert-buffer-substring (current-buffer) (point-min) (point-max)))
(buffer-string)))