Custom form handling in WP.. the correct way?

“create a plugin” isn’t really a separate option, you’d still need to intercept requests somehow. I’ve used the init method, and it’s a viable option. Checking isset on a POST var before kicking off your processing logic is extremely fast, I doubt you could even reliably measure the impact in the sea of other things going on in the load process. The other option is admin-post.php and the admin_post_(action) hook. That method would require redirection after processing.