Controlled vocabulary uses Xalan selectNodeList(). Using selectNodeIterator() instead should lead to faster loading. I measured a significant speed improvement from 50 seconds down to 20 seconds on 10k entries (test dictionary attached).
Attached file: [dspace]/config/controlled-vocabularies/test-dictionary.xml
Further possible work: Loaded dictionaries should be cached to avoid reloading them for each new submission.