You are definitely doing something wrong.
Changing anything is near instant when done right (vheck videos from dynofoliage).
how you do it is just about the only thing that you can ve doing wrong too.
Using loops in BP, for instance, is an immidiate fail.
Directly accessing via editor the instances will also likley just crash the engine.
Any mode or modality in which the engine does something to all instances has a self contained recipy for failiure.
Afterall, to run 1ms operation on each item out of 1b would take some 300 hours.
Changing out or swapping foliage instances in a set area is instant, suffers nothing anywhere, has no runtime load except for the operation you perform - and generally even manages to pop in whatever new instance without flashing the lowest level MIP like stuff often does in unreal.
If you are placing meshes, and not BPs containing meshes, then you really never have issues with foliage runtime.
When you start placing BP instances, then you can always have issues.
Ranging from the Tick occurring on each instance which would likely get you 2fps after 1000 or so instances to any other possible thing you may be doing in the on-play graph or any other event graph.
If you have BP instances that do somerhing with collision on begin play, then thats probably the culprit…