You should check the load on your database and the kind of engine being used. Sometimes table-based locking can slow down query execution. Default configuration of MySQL is not designed for high performance production use, and must be changed to use more memory and cores. Also your MTA needs careful tweaking and management to achieve high speeds. On phpList.com we send at up to 50-60,000 messages per hour, per IP. The composition of your lists is also an important factor at that level. Hope this helps!