What is the most efficient way to handle events in this case?

That rule currently applies only to RemoteEvents, not events in general.

As for performance, listeners will reuse threads when they can: