Order table by two columns
Your data:

CREATE TABLE dbo.WEIRD_ORDERING
(
ID1 INT NULL,
ID2 INT NULL
);

INSERT INTO dbo.WEIRD_ORDERING VALUES
(242, NULL),
(243, NULL),
(244, NULL),
(252, 242),
(254, NULL),
(255, NULL),
(256, NULL),
(292, NULL),
(308, NULL),
(311, NULL),
(313, 311),
(314, 311),
(323, NULL),
(324, 311),
(335, 242),
(340, NULL),
(341, NULL),
(358, NULL),
(372, NULL),
(373, NULL),
(377, NULL),
(378, 358),
(379, 358),
(380, 358),
(381, 358);


This gives you results in the desired order:

SELECT ID1, ID2
FROM
(
    SELECT ID1, ID2, ID1 AS ORDERING_COLUMN
    FROM dbo.WEIRD_ORDERING
    WHERE ID1 &lt;= ID2 OR ID2 IS NULL

    UNION ALL

    SELECT ID1, ID2, ID2 AS ORDERING_COLUMN
    FROM dbo.WEIRD_ORDERING
    WHERE ID1 &gt; ID2 OR ID1 IS NULL
) q
ORDER BY ORDERING_COLUMN, ID1;


db fiddle