Some random ideas...
1. Reduce the number of student athletes you can have on roster to 70, since that's already a fairly common number to see used as the limit for a travel squad. If your team doesn't need you for away games, how important a part of the team are you really? 105 is ridiculous and somehow the NFL gets by on 53, with only 46 allowed to suit up for a game.
2. Get rid of redshirts. Instead, you simply get five years of eligibility from the get-go, so you don't stand to lose out on a year if you play in a fifth game. This would incentivize going ahead and playing the students on your roster and getting them experience wherever possible since there's nothing to lose by doing it. It probably also helps at least a bit with parity, since a 23-year-old on his 5th year has a fairly big developmental advantage over an 18-year-old, and the teams everyone wants to keep up with have rosters full of kids who want to go pro early.
3. Set rules up such that students who are on a single-year scholarship can transfer at the end of the year with no limits. Offer multi-year scholarships where you want to "protect" a player and then structure NIL deals so that the payouts are predicated on students honoring their full scholarship deal, and have students sit out a year when they've opted to terminate a multi-year deal early.
4. Right now you could, not real likely but feasibly have zero players on scholarship and just have some "no really, we're not affiliated" entity sign everyone to an NIL deal, and then the NCAA has zero scholarships to yank as a punishment. Instead of looking strictly at scholarships, track the total compensation package, both scholarships and NIL deals a player has in place. If it's over x amount of dollars, you count against the roster cap. If a player doesn't cross that cost threshold, then they can be on the practice squad/scout team, or whatever teams do to keep having more players than you can have on the official team roster.