Hey, sorry it took so long to get an answer to your question. Just stumbled upon it and I think I have a few ideas.
Older mobile GPUs have many shortcomings but the most likely culprit in this case is fillrate. When you draw pixels semitransparent (as you do with smoke) the GPU needs to fetch the current framebuffer pixel and blend it with your new semitransparent pixel. This causes a lot of extra memory transfers.
To reduce this problem you can adjust the size of smoke particles so they do not overlap so much. Also try to use lower resolution smoke textures. GPU caching makes lower resolution textures faster to draw because more of them fit in cache at once.
Another trick that might help is to draw all smoke to a low resolution offscreen buffer and then draw that to the screen.
Check this manual page for an idea about how to set this up:
https://docs.godotengine.org/en/stable/tutorials/viewports/using_viewport_as_texture.html