It really depends on the directory server that you're using. Some servers provide support for bulk adds under certain conditions, so you might want to look into whether that is the case for the server that you're using. But if you want something that's standard LDAP then your best option is to use multiple threads to parallelize the process of adding entries to the server.
If all the parent entries already exist for the entries you're adding (i.e., you're not adding hierarchical structures but only leaf entries), then it would be very simple to use the UnboundID LDAP SDK to parallelize the process across multiple threads. The LDIF reader already supports using multiple threads to parallelize the process of reading and decoding LDIF records (use an LDIFReader constructor that allows you to specify the number of parse threads), and you can use that in conjunction with an LDIFReaderEntryTranslator that performs an LDAP add of the entry that was read.
If you need to add data with hierarchy, then it's more complicated to parallelize the process because you can't add a child until its parent has been added. However, you can still achieve pretty good parallelism by keeping track of the entries you're currently adding and using some kind of locking mechanism so that you can't add a child until you're done adding its parent. This probably won't be as fast as if you don't need any locking, but you can still parallelize adds in different subtrees.