Use fluid particles and a set of force fields
I use two opposite Wind force fields (B1-2) with "Plane" shape and quadratic (2.0) falloff. Together they determine the midpoint of the Z-region around which the particles will move.
The convection itself is given by two other Wind force fields (C1-2) that, in addition to the quadratic falloff, have a "maximum distance" (displayed by the little dotted circles around them): in this way they act as local forces that "bounce back" the particles that are going too up or too down, which results in convection forces. The stronger these force fields, the more obvious is the convection effect. [[ Edit: raising the timestep from the default 0.04 to a slightly higher value of 0.06 makes the convection more evident too ]]
A weak Turbulence force field (D) and a collision box (E) assure that the particles keep moving and don't escape the scene.
My particle system (A) is emitted from a plane, with random velocity (average = 0), during the first 50 frames. To add some randomness, I've used a Cloud texture to affect the surface emission density.
Important: the gravity field weight must be set to zero (or you can remove B1 and make B2's falloff power = 0.0) [[ Edit: a value of 0.006 - very small - can lead to a "flat bottom" effect that can be desirable for clouds ]]. To make the particles attract, the Physics should be of Fluid type. I have reduced Stiffness and Viscosity to 0.2 and 1.0, otherwise some fixed-size clusters and fibrils start to appear. The Size setting determines the size of the cloudy features (clusters), in a not so obvious way: you should play around a bit to find your optimal parameters. Also, I've used some Brownian force to introduce randomness.
If you want to see actual cylindrical vortices, you can add several Vortex force fields with Tube falloff along the X axis.
Here is my .blend file. Note: you must bake the particle physics yourself!
Update: with the "flat bottoms" edit and a simple smoke simulation, the results looks like this (top = particles; bottom = smoke)
Here is the blend file. To try it out, first you must bake the particle system, then the smoke domain.