This PHP script : https://github.com/dan-da/hd-wallet-addrs , derives public addresses, but does so one by one, which is sloww.
I am pretty sure it is possible to derive say 10 to 100 child addresses at one go. But how ?
I believe the library that bitcoin payments for woocommerce uses is faster than the bitwasp ones. I use it for my bitcoin address plugin too. You can grab it from either plugin.
In my plugin you'll find it in includes/libs. The ElectrumHelper file contains the static function mpk_to_bc_address that you can use.
The downside is that this is only for electrum. You'll have to modify it to use another address derivation.