Well, it looks like we do have concurrency control for mapped tasks after all.
See max_active_tis_per_dagrun which was added in https://github.com/apache/airflow/pull/29094. So this would allow you to map over your 3000 users in a single run, but process only one at a time (or 5 or 10 at a time). Does that help your use case?