Part of the problem may be that you are joining A in twice. Try this:

SELECT
---A.ID,
---SUBSTR(
------MAX(
---------CASE WHEN T.UNITROWNUM = 1 THEN CHR(10) || T.COL_X || ' ' || T.COL_Y
---------------ELSE NULL
---------END )
------||
------MAX(
---------CASE WHEN T.UNITROWNUM = 2 THEN CHR(10) || T.COL_X || ' ' || T.COL_Y
---------------ELSE NULL
---------END )
------||
------MAX(
---------CASE WHEN T.UNITROWNUM = 3 THEN CHR(10) || T.COL_X || ' ' || T.COL_Y
---------------ELSE NULL
---------END ), 2 )
------LABEL
FROM
---(
------SELECT
---------A.KEY,
---------ROW_NUMBER() OVER(
---------------------------PARTITION BY
------------------------------A.ID
---------------------------ORDER BY
------------------------------A.UNIT_ID
---------------------------)
------------AS UNITROWNUM
------FROM
---------TABLE_A---A,
---------TABLE_B---B
------WHERE
---------NVL( B.ACTIVITY, 'I' )---=---'I'---------AND
---------A.ID---------------------=---B.ID---------AND
---------A.UNIT_ID---------------=---B.UNIT_ID
---) T
GROUP BY
---T.ID


If that doesn't work, hint the index.

Let me know if that helps,

- Chris