Query to get distinct items at the top of results and duplicates following
That's a simple task for Windowed Aggregates :-)

Assign a sequential number (1,2,3,...) to each row with the same Item and order by that number:

WITH cte AS 
 (
   SELECT Id, Item,
      ROW_NUMBER() 
      Over (PARTITION BY Item
            ORDER BY Item) AS rn
   FROM Items
 )
SELECT Id, Item
FROM cte
ORDER BY rn, Item


Another way replaces ROW_NUMBER with

      COUNT(*)
      Over (PARTITION BY Item
            ROWS UNBOUNDED PRECEDING) AS rn


This should be more efficient as it doesn't need to actually sort.
I can't test it right now, but it should be similar to a trick used in older versions of SQL Server (before Cumulative aggregates have been implemented):

      ROW_NUMBER() 
      Over (PARTITION BY Item
            ORDER BY (SELECT 1)) AS rn