Keep unique IDs out of custom dimensions. This is the hard rule. Order IDs, session IDs and timestamps do not belong in a dimension you use in reports. If you need transaction-level analysis, do it in BigQuery.
Clean up your URLs. Strip the parameters that add nothing to your analysis before the tag fires, or use the query parameter exclusion setting on the GA4 data stream. Which parameters to keep and why, we covered in the article on query parameters.
Shorten your date range. GA4 applies the limit per day. Ask for a report across three months and the unique values pile up. The same analysis per week or per day often gives you the breakdown you were after.
Use fewer values per dimension. Group where you can. A dimension with twenty product categories is workable. One with four thousand article names is not.
Go to BigQuery when you need value-level detail. The export holds every event separately, with no aggregation and no (other). There you can group by order ID.
SELECT
REGEXP_REPLACE(
(SELECT value.string_value FROM UNNEST(event_params)
WHERE key = 'page_location'),
r'\?.*$', '') AS page,
COUNT(*) AS views
FROM `my-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20240101' AND '20240131'
AND event_name = 'page_view'
GROUP BY page
ORDER BY views DESC
Run that same query without the REGEXP_REPLACE and you see how many unique URLs you generate per day. That number is your actual cardinality problem.