Can i ask on average how often this would need to be done?
Also per time how many items your talking about liekly need to be removed?
And how big is the hash table in total?

have you tried optamizing your hash table removale loop?
while ($hfind(hash_table,something *,1,w).data) { hdel hash_table $v1 }
or even....
while 1 { hdel hash_table $hfind(hash_table,something *,1,w).data } | :error | reseterror