I agree firing should be the last resort, but I very much disagree that "it means either that the person is hopelessly, irredeemably unfit for the job, or that you are incompetent at leading people."
This is why I say that often times the worst people to hire are those that are "just below average mediocre". Reason being that, as you point out, it is not hard to fire people who are blatantly incompetent. And of course many/most people can be coached to improve, but I've seen cases where, despite lots of coaching, people chronically underperform.
I consider it a mark of bad management when these subpar performers are only let go during layoffs. Conversations should be open, ongoing and constant, and people should be given lots of coaching, time, and plenty of heads up, but it does nobody any good to essentially string people along when folks aren't cutting it.