Ti sconsiglio di creare uno script che mandi 2000 mail, con o senza sleep dovresti innanzitutto gestire il problema del tempo di esecuzione dello script, con il rischio che se lo script si pianta devi poter gestire la ripresa della coda... a quel punto sapresti dove sei arrivato?

Personalmente preferisco il seguente approccio:

Tabella su db con memorizzato indirizzo a cui mandare la mail e stato (0 se da spedire e 1 se spedita).

Dopodichè richiamo uno script che preleva N indirizzi alla volta tra quelli che hanno lo stato settato a 0.

A questo punto puoi mandare la mail in bcc in una volta sola e settare a 1 lo stato di spedizione per questi indirizzi, oppure ciclare questi indirizzi e mandare una mail alla volta.

In questo modo sai sempre a chi hai già spedito la mail, e a chi no, inoltre scegliendo un numero basso non hai problemi di tempi di esecuzione.

La cosa da fare è poi tramite un sistema di cron richiamare la pagina che fa la spedizione ogni tot minuti.

ciao