Thank you to everyone for the suggestions, I did ultimately come up with a pretty good solution and wanted to share it here for future readers!
Ultimately I was able to tweak our database architecture, combining/removing some tables, which simplified the overall design and reduced the time required to run the creation script. I also re-wrote our creation script so that it would perform one query per table instead of three queries (one to create the table, second altering the table to add the indexes, third creating the foreign keys). These two things did give a big improvement on running the script, it went from around 50 seconds on average to 8 seconds!
Another thing that we did which makes a big difference for the user experience was to create a service that runs independently on one of our servers that will do nothing but create new databases that sit empty waiting for a new user sign-up. When a user signs up their account is simply assigned to the next available empty database. We've set it up so that the DB creator service won't get more than 100 ahead of what our actual account needs are. This design has decreased the time the user waits when signing up to 1 or 2 seconds. It all feels a little "hacky" but ultimately it's a huge improvement!