Is it even possible? I have an application that is susceptible of a same person creating many different accounts on different IP addresses. How to fight against this the best? Using 2-step verification like SMS? Any other ways?
There are different approaches, based on how badly you want to prevent users from creating new accounts. While this isn't a comprehensive list, it should give you an overview of what is being done:
Just let them
The simplest approach is to not care at all. If your users want to create multiple accounts, you just let them. While this may sound like "The safest way to ski is not to ski", it is indeed how some services operate. Not every user with multiple accounts has those for malicious reasons. For example, you could create a second Stack Exchange account for a question that you may find embarassing or for which you may have personal reasons as to why you don't want to have it connected to your other account.
Tie registration to a difficult-to-obtain factor
Phone numbers aren't as easy to obtain as they used to be. Back in the day you could buy 20 pre-paid sims with individual phone numbers at the grocery store and nobody would bat an eye. Okay, maybe the cashier would look weird at me, but she doesn't get paid enough to care.
These days, even prepaid SIM cards are more difficult to come by, so an attacker who wants to have lots of different accounts has to go through significant trouble to get them. If their costs to get a new account are higher than their expected gain, it'll not be worth it anymore for them.
Make them pay for a new account
You could tie accounts to licenses. As such, if a user wants to register 10 accounts, they need to buy 10 licenses. While obviously this strategy doesn't work for every kind of service, it does indeed work for some kinds.
Cheating in an online game, for example, becomes less desirable if you need to pay 40€ for a new copy of the game every time you are banned for cheating.
Analyze their behavior
This approach requires considerable investment, but you can build a system that looks out for anomalous behavior and flags it for manual review. For example, if two accounts constantly and almost exclusively upvote each other, then you can be pretty sure that those are sockpuppet accounts.
Of course, the actual implementation of such a system is difficult and will include lots of false positives and false negatives, but depending on how badly you want to stop people from using multiple accounts, it may be worth it.