Usually the pattern is "for f in [glob]", which doesn't have that issue. Running "ls" on a directory is little more than "for f in *; echo $f" so there's little advantage to using "ls".
Also: "find -exec {} \+" will take ARG_MAX into account, and may be much faster depending on what you're doing.