There are somethings that you can improve the indexing speed in solr side, one of that is set mergeFactor to ~ 30, it will avoid unnecessary segments merge in lucene, after the indexing you can roll back to factor 10 and run optimize command in your core.
The experience tells that is better you index a set of document per request than a document per request.
Generally the guys send sort of
<add>
<doc>...</doc>
</add>
I recommend you send a set of document > 10 in the same request and the parameter commit=true in the url(don't optimize the core yet)
<add>
<doc>...</doc>
<doc>...</doc>
<doc>...</doc>
...
</add>
it will reduce the cost to open the index files to write, xml parse, etc.
In jvm, increase the heap using the familiar parameters -Xms/Xmx