So the trick around emission noise is that it can't light itself. If you have a single geo node that has the pyro sim in it and point the geo light at that, then it's not working, it's just using volume samples and Ce emission. Crank them up and you start to remove your nosie (and your hair cause it's going to take a while).
If you create a new geo node, object merge your sim into it and point the geolight at that, then what's it's going to do is generate the point cloud from that object and use it as a direct light on your original pyro sim. Make sure you generate pointclouds and it'll be nice and noise free... Or you could down-res your sim which will also make the light source smoother.
It's a stupid little thing, I found it in the docs somewhere daft, but can't find it now.

Looks like way too much velocity, either from your source or a "shape", turn everything off, turbulance, disturbance, source velocity etc, then start introducing them back in to see which one is messed up.

Microsolvers are faster.
Gas analysis is going to give you the data you want efficiently, so defo use those. If there's not a micro solver for what you want, try gasFieldVop, or a wrangle. Last resort is sop solver.
Of course it's up to you. I'll still use sop solvers quite a lot as it's easier to do some things even if it's less efficient, but they CAN be quite a lot slower as you scale up the quality. Depends on what you're doing.
So a gasAnalysis of the gradient will be much faster than a sop solver with a volumeAnalysis calculating the gradient inside.
I have no proof of this, but you could run the performance monitor and test it. Post your results.

I've no idea on the thread, but I've done a lot of this.
You can do it in the smoke sim, but I've found that if you advect particles through the sim and create a field from the particles you end up with a better result, and a more directable one at that as you have more control over blending radius etc post sim.
So do your sim... You could advect particles through it then, or after you've cached it out.
Create your colour attribute on the points based on age however you want.
Create a new vector field called colour that is the same size and res as your sim (or downres if you prefer).
Use the VolumeFromAttribute SOP to copy the Cd attribute accross to the colour field.
Done.
Hope that helps
Christian

Diffusion is going to blur your density values, you want divergence...
As for wind, you can either source velocity that is stronger the higher up it gets, or create one on the fly in the solver that is influenced by temperature, so the cooler it get's the more influence of wind it's going to get. Creating your source in SOPs is obviously the easiest option here if you don't know DOPs that well.

SHOPs doesn't support ints if memory serves.
For instance, I always end up making a fid (float ID) to get things working in shaders, but this might be old habbits, by the look of your post though I think it's still applicable.

If you close off x/y +/- domains it should do this automagically because of the pressure calculation.
Otherwise there's no reason you can't do the same thing as you do with particles, either in a gasFieldWrangle, vopForce, sopSolver etc... Just apply the velocities to the vel field.

As mentioned before, you don't have to build everything from the ground up. Adding into the inputs of the pyro solver is mostly enough.
So I doubt there's any artist properly building a solver from scratch. Maybe they unlock it and add something in there to the main solver, but mostly I bet people just bolt things ontop of it...

You want expansion, also called divergence, also called gas released...
I think there is probably a way of doing it in the default pyro setup, look for something like "temperature influence gas", but it might be influence heat, in which case not what you want.
Add a gas calculate into the advect stage? Of the pyro solver and copy temperature field to divergence field. Not exactly what you want, but you'll see it start to do something. Really you'll want a vop or wrangle there, see if temperature exists (not zero) and then fit and flip the field. So temperature might be 0-10 range, fit that to 0-1 and complement it, then multiply by how much effect you want...
On mobile now, if that makes no sense I can help tomorrow.
Christian.