it’s definitely not an easy problem to solve. My first thought is to use a larger collision body to detect when an actual collision is imminent, then based on what it hits, change the actual unit’s channel to the appropriate channel, such as pass-through, crush, normal, etc.
The idea of a channel for each type sounds easiest, but, as you said, there are only so many.