Before realizing this was possible, I was going to just use some scripting, a "Humanoids" array and a "Creatures" array that contain all the appropriate races, and then arrays that contain the respective Spells. I'd then get the Actor's Race position in the "RaceArray" and then grab the respective Spell using the index. This would require a Spell AND a MGEF for each race, instead of one catch-all Spell.
So my question is theoretically, which is faster? In one, the game code looks at each Actor and uses the condition functions to figure out which MGEF to apply, but if there are 50 MGEFs and the Actor has the first MGEF applied, it still goes through the other 49. Of course, you would order the Race to be checked first so that it would move on to the next immediately (If the game even checks ANDs left to right). On the other hand, you do the checking in Papyrus, by returning the respective Spell after checking the Actor's race. But this requires a few arrays, array traversal, and a bit of If/ElseIf. The Elseif tree would only be because I'd split up NPCs from creatures, to keep array size down and make it more maintainable.
Speaking of maintainability, I also wonder if overloading a Spell is just superior hands down, because a new MGEF for a new race will be able to be added in the middle of a save game, whereas if I went the Papyrus route I wouldn't be able to update the arrays and have them take effect without making a new save. Unless the MGEFs listed in a Spell also become permanently bound to a savegame too. This would let me put out support plugins for DLC or patches to support races from other mods by adding more conditional MGEFs in the spell.
Also, given the implementation of the idea, I don't even know if I could profile it. Not that I know how to profile in Papyrus, but it seems like a tremendous pain. That's why I am hoping someone has a theoretical answer.
