Porque ls
indica todos os arquivos primeiro, gera mensagens de erro para os arquivos ausentes, então ordena os nomes de arquivos existentes e os envia.
Assim, os redirecionamentos não afetam a ordem da saída. Você pode testar isso escrevendo um comando simples que produza algo para ambos os fds, e a ordem deles será a mesma
$ f() { echo stdout; echo stderr >&2; }
$ f > /tmp/output 2>&1
$ cat /tmp/output
stdout
stderr
$ f 2> /tmp/output >&2
$ cat /tmp/output
stdout
stderr