Try this:
DECLARE @T1 TABLE (COL1 VARCHAR(25), COL2 VARCHAR(25), COL3 VARCHAR(25))
INSERT INTO @T1 (COL1,COL2,COL3)
VALUES ('1','1,2,3','4,5')
DECLARE @COL1 TABLE (VAL1 VARCHAR(25))
DECLARE @COL2 TABLE (VAL2 VARCHAR(25))
DECLARE @COL3 TABLE (VAL3 VARCHAR(25))
INSERT INTO @COL1 (VAL1)
SELECT DISTINCT Split.a.value('.', 'VARCHAR(max)') AS String
FROM (SELECT CAST ('<M>' + REPLACE(CAST(COL1 AS VARCHAR), ',', '</M><M>') + '</M>' AS XML) AS String
FROM @t1) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
INSERT INTO @COL2 (VAL2)
SELECT DISTINCT Split.a.value('.', 'VARCHAR(max)') AS String
FROM (SELECT CAST ('<M>' + REPLACE(CAST(COL2 AS VARCHAR), ',', '</M><M>') + '</M>' AS XML) AS String
FROM @t1) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
INSERT INTO @COL3 (VAL3)
SELECT DISTINCT Split.a.value('.', 'VARCHAR(max)') AS String
FROM (SELECT CAST ('<M>' + REPLACE(CAST(COL3 AS VARCHAR), ',', '</M><M>') + '</M>' AS XML) AS String
FROM @t1) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
SELECT *
FROM @COL1
CROSS APPLY @COL2
CROSS APPLY @COL3
ORDER BY VAL1,VAL2,VAL3