Alternate per 2 postgresql rows, but start over if there are rows remaining
I think you need something using ROW_NUMBER() and (integer) division by 2, along the lines of this:

WITH p AS
( SELECT *, ROW_NUMBER() OVER (PARTITION BY supplier_id ORDER BY id)-1 AS rn
  FROM products
)
SELECT * 
FROM p
ORDER BY rn/2, supplier_id, rn ;


Tested at SQLFiddle.