Yep, the best you can do is to load one song file every step event - that should avoid the game giving the appearance of "locking up". This has the added benefit of allowing you to increment a progress bar during the step event for an accurate representation of loading. I've done this before, it works pretty well.
Unfortunately, there's no way to have parallel processes in GM, so you can't have the main game thread executing and then spawn off a separate process to load the music (at least as far as I know, you might be able to hack this functionality in with an external library, but I haven't seen it yet!). You've gotta break the task down into chunks that the game can run in its loop to give the appearance of multitasking.