It's quite viable. You just need to keep tweaking things until you get the results you like; procedural content generation is like that. This would probably be true even if you wanted to avoid doing the generation at runtime and produce a static texture map or something that defined the cloud pattern -- you'd likely just be tweaking the procedural controls for the Perlin filters in Photoshop, for example.
It looks like your current approach is based on generating noise and then thresholding it so you eventually have a Boolean value in your cloud map for "is this a cloud block or not." If that alone isn't giving you results you like, you might try applying varying degrees of thresholds in a loop instead of the simple test you've got now, with the hope of consolidating the contiguous blocks of cloud.
In fact, you could also look at it like generating organic rooms (caves for example) in a Roguelike. There's an article here on doing cellular-automata-based smoothing of an initially random data set to produce smooth cave-like rooms, which may be adaptable to your needs. The basic premise is to generate a random 2D grid of cloud and non-cloud tiles, and then for each tile in the grid, change it to a cloud or non-cloud based on how many tiles of whichever type are currently surrounding it. You can apply the algorithm any number of times to play with the smoothness. It might be worth a shot.
(It also might be neat to extend this into 3D a bit, not necessarily for the purpose of animating the clouds, as Byte suggested, which I feel may look odd in the discrete world of block-levels unless you also have varying degrees of cloud block opacity, but just for making actual 3D clouds that aren't constrained to a block plane as Minecraft's appear to be).