Cara, eu até entendo você usar conceitos de modelagem de banco de dados... a gente vicia nisso.. mas nesse caso nós estamos falando de orientação a objetos, que inclui outros conceitos, entre eles o de que o nome de uma classe deve informar aquilo que ela faz, sem que você precise olhar o código.

Agora sobre associação polimórfica: 

Existe muita discussão na comunidade acerca disso. Eu, em todo caso, falo por experiência própria. 
Uma JobCategory e uma UserCategory são entidades completamente diferentes. Apesar de possuírem "comportamentos", à primeira vista, parecidos.
E, usando inclusive um conceito de normalização, você teria, em uma mesma tabela, dados das categorias "remote" e "in-company", por exemplo - para JobCategories - e "employer" e "employee" - para UserCategories.
Você teria, então, que usar SEMPRE uma cláusula pra filtrar os dados pela coluna type quando fosse usar essa entidade. Isso é caso clássico de que é necessário "normalizar", como você mesmo disse :) 
Uma JobCategory e uma UserCategory não são a mesma coisa, então não devem ser tratadas como se fossem.

Um caso onde associação polimórfica se encaixaria, por exemplo, é pra uma class Address. Aí sim, perfeitamente aplicável! Um User tem um Address, uma Company tem um Address, assim como um Brokerage Contact, um Agent, etc, etc... *Nesse caso*, seria útil, ao invés de termos, em Address, company_id, user_id, brokerage_contact_id.... poderíamos ter um "addressable_id" e um "addressable_type".

Enfim, por isso afirmo que polymorphic association não se encaixa nesse caso.