See #1318 , tl;dr use a wine build that supports large address aware override (e.g. from Lutris) and set WINE_LARGE_ADDRESS_AWARE=1.
I did some more tests tests with LAA and this is what I found:
Without dxvk even when everything is set to High I can't cause the crashes that I'm seeing. If address space exhaustion is the problem then dxvk is allocating a big chunk of memory for the map "Operation Smoke Screen" except if "Strike at Karkand" is loaded before it.
Is there a way to print virtual address space allocations that might be done by the game or by dxvk?
I think there's some way to print virtual memory mappings in /proc, but not sure off the top of my head how to use that exactly. That said, DXVK is known to have significant memory overhead compared to wined3d, and it's not an easy thing to improve at all.
I understand. This issue can be closed if you think there is nothing that can be done about it, the game works fine with Lightning set to Medium. I might try to trace the allocations when I some have time, maybe something pops up.
WINE_LARGE_ADDRESS_AWARE=1`.x1 2020-04
It only happens on DXVK during map loading and it's a bit fiddly. Sometimes it works with Dynamic Shadows set to medium, sometimes it doesn't. Once it randomly didn't crash but when entering the game it was running at 2 seconds/frame and the weapon was completely black. I don't have a trace of that run unfortunately.
This issue was also discussed on d9vk, but no trace/logs were provided for this crash: https://github.com/Joshua-Ashton/d9vk/issues/415
Screenshot of the crash error dialog:

Software information
Battlefield 2 v1.5, Lightning and Dynamic Shadows set to High. Other options don't matter.
System information
Apitrace file(s)
https://drive.google.com/file/d/1FiolLb1cUJeRBCOz8pPXnfsX7yJY6NtX/view
Log files
BF2_d3d9_crash.log