If you were to unblock all, they would all think they had obtained the semaphore exclusively and mutual exclusion assumptions in the code following the SemPend calls would be violated. See page 192. At no point have we ever discussed a routine that you could call to give you two semaphores. In any case, this would not awaken a blocked task when either semaphore was posted to. See page 192.
Semaphores are simpler and faster.
See page 232. Time slicing can only make response time worse. See page 233. You might not do this in your code, but it is possible. Blocked lists need only be processed if a timeout functionality is supported, and you could always have a separate list in that case of tasks that block forever without specifying a timeout value.