Custom Plugin – Blacklist/Whitelist domain email and change user role – Suggestions

I’d suggest you process all users once (using a WP-CLI command if your db is big and response timeout is a possible risk) and then check a user each time they try to change their email (using wp_update_user filter – https://developer.wordpress.org/reference/functions/wp_update_user/).