You are headed in the right direction using a foreign table. The case-statements might slow you down, but the mySQL won't. If you set up your tables correctly, you can join them on the states abbreviations, and select the state-name, rather than abbreviation so when it's displayed, it's displayed as state-name. But it wouldn't be that hard:
SELECT count(a.troups), b.statename
FROM troups_listing a
INNER JOIN state_listings b
ON a.state_abbreviation=b.state_abbreviation
GROUP BY a.state_abbreviation
ORDER BY b.statename ASC
And that should give you what you want, or close, or whatever....
But yes, using a separate table (not database) for the state name listings is perfectly fine, and actually a preferred method. Mainly for extensibility for later when you decide to expand, you can add states/countries, and not have to worry about editing all your rows in your database. It's now just a minor change to a secondary table.