Bitcoind uses only ~1.5% CPU for RPC command "getnewaddress" I'm running bitcoind and generate a bunch of bitcoin addresses. I use a PHP script and an Apache2 server to make calls to the RPC API.

bitcoind uses ~ 0.7%-2.2% of the CPU and writes ~3 MB/s on the SSD. 
Apache2 uses ~0.3% of the CPU.

I set -rpcthreads to 8 but that didn't do anything for me.

Where is the bottleneck?
Is there a way to speed the hole process up?

I know that vanitygen can create a lot of addresses but then I would need another step to add them all to a wallet therefor I would prefer using bitcoind. bitcoin-qt is just awful slow at the same task with RPC commands.
This is a known problem in the wallet code.

Whenever a new address is retrieved from the key pool, a new key is also generated to replenish the key pool. When this happens, we try to make sure this new key is safely on disk, so we flush the wallet file to disk. Due to probably overly aggressive flushing, this results in large writes to disk in BDB.