But those three are not the same. You can have only one event FIRE (or activate) for each file, but you can have as many variations on the event header (the bit before the start of the actual scripting code) as your mind can dream up, all in the same file. It's just that when one of them matches and fires, no more events of that type will be examined in that file. mIRC then goes on the the next loaded script file and repeats the process there.
These three event headers are all different and only one of them will fire for anyone on the master level. The same thing holds true for the on 3:JOIN: event headers and finally the on *:JOIN: events.
Note that the order they are placed in the file is important. If you want master's to match before checking them for level 3, put the master event headers first in that file. on *:EVENT: should be last as it catches everyone and is roughly the same as the ELSE for that event.
When I have speed tested this in the past, separate events worked faster than a single long event. This seems contrary to how I'd think it would be since mIRC only has to process just the one event. However, if you're only doing just the code required for that event if it fires, mIRC doesn't have to parse anything else at all to see if there are more commands it has to deal with.