1. I think 4 rows should be fine given that you have 24 different versions of the survey, therefore your total design consists of 4*24 different choice tasks. Of course the efficiency is lower when using 4 rows because you get half the amount of information
2. That would be possible. Given that you will have 48 different blocks, it is to be expected that some blocks may have very few respondents (perhaps even none), and that is fine, there is enough information in your data to not having to worry about missing blocks.
3. Yes attribute level balance is not really important, it is a nice to have feature but has little to no influence on your model, so if you prefer to have 5 choice tasks over 4 then please do so. If you are using the mfederov algorithm, then you can use something like bprice * price[1,2,3,4](1-2,1-2,1-2,1-2) to indicate that you would like to have each level appearing 1 or 2 times. If you use the default swapping algorithm, then you need to be aware of the fact that it will use levels 1,2,3,4,1 (it cycles through levels) looking at the order in which the levels appeared, so it will always have the first level twice. In that case, you may want to vary the order in which attribute levels appear in the syntax, e.g. bprice * price[2,4,1,3]. You could overcome these issues by simply creating 5 price levels.
I would prefer option 2 or 3. Option 2 is likely the hardest one to implement, having 48 different versions. Option 3 would also be fine if you think that having 5 choice tasks per respondent is doable as it will provide more information in your data.
Michiel