2 factor authentication can work will smart contracts, and the world has already started to look that as a solution.. Here is an open source code for the same-
https://github.com/Zuchos/tufaA user can sign up on the application and whenever asked for 2FA code/ token verification, user just need to send token as a data to the Application's smart contract from his Ethereum account. The application reads token that was stored in smart contract and will authenticate the user.
The above will become very difficult to achieve till the ease of use part is not solved by the industry in the Ethereum address ! But seems like a secure and a possible way , overall.