I'm understanding that using code for directly checking(rectangle-in-rectangle for example) will be faster...but, will it be better for your use case? One advantage of creating a sort of second invisible instance for this purpose is so you can more easily visualize the actual collision boxes. Most of the time, precise collision checking is slow, but if it works better for your game, and is fast enough, who cares? If you are making a fighting game with few characters going at a time, it shouldn't bog the system down at all. And it would let you draw sprites that correspond to animations of your character. Say you are doing a punching attack, and you only want the fist to actually do damage, you draw a second equally sized sprite, and just alpha out everything that isn't the fist. You then have a second instance "overlaying" your player that is what actually tracks the collisions. Typically this would be invisible, but if you wanted to, you could implement a system where it draws it if you set a "debug" variable or something.
One thing to consider, there is a such thing as premature optimization. In general, if you are using Gamemaker, you are already trading developement ease and speed for final product performance. The engine won't be able to catch up with a natively coded specialized engine, but of course it would take much longer to develop a game in such a system, which is where Gamemaker wins for many people. This applies not only to the game engine, but to other aspects. Is it easier to simply draw over/alpha out the fists for your fighters, or easier to make out coordinates frame by frame for rectangles in order to code it so it could be faster. Honestly, if the easy way to do it is fast enough, leave it alone. Only if things get bogged down, and something specific is the cause, do you then go and change it to a harder to work with but faster version.