I’ve used DNS queries to check domains in the past, and I don’t recommend it (it would sometimes time out due to network issues when the domain was in fact valid).
About a 20-second timeout should be sufficient, and people are used to waiting that long after a form submission. If after 20 seconds we get no valid MX records, then we show an error message and invite the user to retry. The user can then click the submit button a second time. By then the local recursive DNS server’s cache should be filled and it will respond immediately. If a second try yields nothing, this is a very rare situation, occurring perhaps on time out of a thousand. The user may have to come back later, or perhaps enter an alternative email address.
Looking on the bright side, if a spammer uses an invalid RHS, we will cause him to waste some time retrying.
Personally I’m not that worried about email addresses being invalid. I’m much more concerned about rejecting valid emails due to an outdated regex or a reverse DNS timeout. I think that your solution makes sense where it’s important that the email be valid, but I think even then I would prefer to make them reply to a confirmation email (since a valid email doesn’t mean it’s their email).
I wouldnt want the MX record search to be the default. I wouldnt want to use it. Probably just get complaints from users/site owners. You could use ajax + a custom function easily to do this if it’s a requirement.