Settlement parameters are either profiles or individual values. Not sure on how you plan to use rate category as parameter.
Having a settlement unit per rate category would indeed be quite a lot of settlement units.
What I would think of is having a profile role per rate category.
Department could be Selection Variant or higher level settlement unit.
Product would be settlement unit.
Each rate category would then be a profile role on the settlement unit.
You can then have settlement steps that aggregates per rate category.
I would copy/derive class CL_ISU_EDM_SETTLSTEP_0003 to aggregate to the correct profile role on the settlement unit.
You might need some customer specific table to map rate category to profile role.
For each rate category you would have a settlement step, all based on this same class, output to settlement parameter with the role as rate category.
Above is not ideal as on addition of rate category you would need to create a new settlement step and update the settlement units and procedure.
Not really dynamic.
Maybe you can make it a bit more dynamic by reading rate categories at start of settlement procedure and looping over them. That would save changing the settlement procedure but still require a new step and update of settlement units.