I play on another site called Scoresheet baseball that uses a queue. What they do in the case of the 18 1b situation is use "roster balancing". Roster balancing sets the parameters that it is going to fill positions that haven't been filled...including backups...before it will pick your tenth or even 3rd firstbaseman. It also lets you override the roster balancing procedure by either "marking"(they use an asterisk) that you would rather have a certain firstbaseman(even if its your third) than a backup secondbase player. You can also turn off the roster balancing feature if you so choose.
So the way it would work with scoresheet is like this....if you have roster balancing on, you would select
1 each of catcher, 1b, 2b, 3b, ss, 3 ofers, 5 starting pitchers and 3 relievers before you start duplicating positions. After those positions are filled then it would start picking backups and/or more pitching.
The engine then uses your lists for backup players and/or more pitching slots. Again, it won't take a 3rd secondbaseman before taking a backup Of'er.
In the first scenario above...the queue would skip all your 1bman and fill out your pitching rotation. before going back to the top to grab another 1b.
In the second scenario the balancing feature would grab the 3bman before filling out the pitching staff and then go to filling the bullpen.
Gotta run right now, but I have an idea for the salary problem as well.