Desde tu dataset filtras de 50 en 50:
Si es un Query puedes usar tu motor de BD para traer de 50 en 50 registros o si no usar la propiedad filter del mismo.
Si es una tabla tambien podras hacer uso de su propiedad filter
.
Pero si lo prefieres podrias hacerlo uno que otro retoque a la función que te pase anteriormente, de manera que cada que llegue al numero limite llame a ShellExecute, haga una pausa y siga con los demas...
.