The "easy" solution would be to allow you to create a defensive matrix for the when you set defensive replacements to kick in. You couldn't put a guy in more than 1 position for this, so if you have a defensive SS you want in late, and and offensive SS that normally plays, it would look at the matrix, bring in the SS off the bench, move the SS to 3b (or whereever you place him in the matrix for defensive subs) and move the 3b to the bench (or another position) It gets complicated though due to pinch hitters or guys on rest, etc... It would have to be several layers deep like the current defensive heirarchy.
Perhaps the solution to that later problem would be to start on the left of the defensive spectrum and when defensive replacements are called for it makes sure the top available SS is at SS, moves to 2b, out to CF, over to 3B, etc.... constantly taking the top guy at each position that is available. If no one is available, then the current player remains in their spot. It likely wouldn't be perfect, but it would be better than what you get now and would be closer to real life. The one downside is that it could wipe out your bench in a hurry so a smart GM would have to make sure that their regular starters are listed at the top of a position somewhere unless they didn't mind them sitting on the bench. It would be ideal if you had 1 defensive specialist that you wanted to bring in at a defensive position, but keep that bat in the lineup by allowing him to play somewhere else in the field.