Like I said, WP isn't known for being performant. There are probably also historical reasons, WP has been around for a while and you couldn't use large VARCHARs back then. And they can't change it now.
As for the character limit, we can't change it. It's a little complex but there is a maximum row size of 65k bytes and with UTF8 we need to allow 3 bytes for each character (English-only uses less but foreign scripts like CJK use the full 3 bytes). With the current set up it could go to around 20k length, but that leaves zero room for future expansion.
However, looking into a recent post (the emoji one) it turns out you need to allow for 4 bytes per character so we will have even less space when that gets fixed.
Discourse doesn't use MySQL so their limitations are different.