If you have a tool (e.g., Splunk) to perform analysis on your logs, you could dig deeper to find out whether the consumption of leases is due to persistent clients using the network for medium-to-long periods of times (e.g., laptops) or whether the consumption is from short-lived associations from smart phones and tablets.
What we found was that the smart devices accounted for a great deal of address consumption, so we have since moved student mobile devices into RFC1918 space. This freed up a great deal of addresses for us.
We have the same issues as you in terms of having to look for enough contiguous address space. If we get into a bind, we would like move all student devices into RFC1918 space.
Long term view is building NAT64 in the core and putting all Wi-Fi clients on IPv6 only.
And FWIW, even VLAN pooling is remarkably more efficient (for us) than hash was. The variance between most and least utilized subnets in a hashed pool was ~22% on average; with even, it's ~6%. That's substantial when you're talking about 20-30 /23s in a pool! :)