Each time you create a particle, find it's velocity and do a trace in that direction. Store the z-component of that trace-vector in one of the particle skills (skill_a,skill_b). That way you are only doing one "slow" operation per particle.
When the particle gets to that height, then make it stop, splash, splat, explode, or whatever.
One thing I noticed, is that while this stops the particles, if you have streak (or maybe beam too, I don't know) turned on, the streaks will continue past the point where the particle stops.
One disadvantage with this system: it doesn't work on moving platforms. For the most part, it looks good though.