The short answer is no. Craft does not natively support this, and there's no way to implement it via a hook (or event).
A quick browse through the code shows that the
UserIdentity::authenticate method is where most of the action takes place (called from the
UserSessionService::login method), and that's very much tied to using either a username or an email address.
Your only option is to implement a custom plugin, with its own controller endpoints, which handles login requests. You would then submit the login form to your plugin, rather than to Craft.
Such a plugin will, of course, need to follow all of the same security best practises as the current Craft "login" implementation, and be actively maintained in case any vulnerabilities come to light.