The problem with the uvm_config_db is that the more items you set() into the database, the longer it takes to get() each item. The database is keyed using strings, and has to scan using string string compares. This has been optimized over the year, but there will always be some performance cost based on the number of items in the database.
A much better way of doing this is to create a single configuration object with all the items grouped together for a particular transaction. Then all you have to do is get() one handle to the object for each transaction.