One possibility would be to implement Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso) instead of OAuth. If you track the user’s region in your system, then when they sign in via SSO you can use the add_group
payload to add them to a group for this region. You could them make a category per region, with security settings so they need to be in the group for that region to see it. While you’d still end up with tons of categories (and I agree a rethink of this wouldn’t be a bad idea), normal users would only see public categories and the category for their region, not all 250 categories.
One possible way to organize this would be to use tags instead of categories. You could have 1 category for regional discussions, and they users could add tags for their region. While users would see everything, they could update their notification settings to track or watch their region tags. For more details on tags, see our recent blog post.