For reducing shadow cost, ue5 currently has mainly two different ways of shadows (you can change between the two in the project settings). One is virtual shadow maps, which is the new unified way, the other is shadow maps which combines different methods. Virtual shadow maps is generally heavier on performace, and performance really goes down if the objects are not static (i.e. virtual shadow maps relies on caching the shadows) or non nanite.
For shadow maps, performance goes down if the meshes are high poly (e.g. if you use shadow maps and those cliffs are very high poly, it will perform poorly and virtual shadow maps with nanite would likely perform better there). You could switch to distance field shadows though in the directional light (set the cascaded shadow distance to 0 and then enable distance field shadows), those are also static but should be cheapest. You could then also use capsule shadows for skeletal meshes.
And for small things like grass you can use contact shadows (screen space post processing effect) which is very cheap.
And then there are some settings in the directional light for shadow maps, as well as lots of console variables for virtual shadow maps.