Quello che dici è vero e le tue preoccupazioni sono fondatissime.

1) Lo script ce la fa a ciclare tutto in 30 sec? (a meno che tu non abbia aumentato il tempo a disposizione degli script)

2) La soluzione è molto semplice ma devi vedere se puoi applicarla. Aggiungi un campo e lo chiami send (o come vuoi tu). Il campo deve essere di tipo INT e di lunghezza 1.
Il valore di def sarà 0 (l'utente non ha ricevuto il msg).
Man mano che gli sms vengono inviati lo script provvede a modificare il campo in 1 (L'utente ha ricevuto il msg)
In pratica lo script fa questo:

1) Estrae dal db solo gli utenti dove send corrisponde a 0
2) Li conta
3) Se il risultato è maggiore di 1 comincia ad inviare gli sms ed a modificare il campo da 0 a 1
4) Se non ci sono utenti con il campo settato a zero significa che a tutti gli utenti è sato mandato il ms e quindi devi provvedere a modificare di nuovo il campo da 1 a 0 (in questo modo il nuovo msg verrà inviato a tutti)

CONSIGLIO
Puoi anche inserire un link che ti permetta di cambiare lo "status" senza che vengano inviati msg.

In questo modo saprai a chi è stato inviato il msg e a chi no. Semplice!