The best defense mechanism for full subnets is subnet splitting. Subnet Splitting forum post is here, closely adjacent is Canister Groups with this forum post.
It entirely depends on your requirements. The biggest issues for OC are probably performance (XNet calls take longer than calls on the same subnet), and changing the subnet on which they create new canisters. I’d bet with OC’s experience people will quickly figure out some best practices to prevent such issues from appearing thanks to better architecture choices early on.
Cost, even though storage is cheap it still takes a decent amount of money, and the ability to create new subnets basically on-demand. Looking at the dashboard, there’s currently 700 nodes ready to go that are not assigned to a subnet yet.