MySQL recomienda usar índices por una variedad de razones, incluida la eliminación de filas entre condiciones:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Esto hace que su columna de fecha y hora sea un excelente candidato para un índice si la va a usar en condiciones frecuentes en las consultas. Si su única condición es BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
y no tiene otro índice en la condición, MySQL tendrá que hacer un análisis completo de la tabla en cada consulta. No estoy seguro de cuántas filas se generan en 30 días, pero siempre que sea menos de 1/3 del total de filas, será más eficiente usar un índice en la columna.
Su pregunta sobre la creación de una base de datos eficiente es muy amplia. Diría que solo se asegure de que esté normalizado y que todas las columnas apropiadas estén indexadas (es decir, las que se usan en las cláusulas join y where).