The simple thing would be just to swap in a 4.0L if you want a stroked 2.9L.
A windsor small block would probably be the most practical cost wise, but a 351 cleveland swap is certainly possible. Aftermarket is a little more expensive for 351C.
Custom forged pistons were going to cost $700 alone for my S/Ced 2.9L, so I scrapped the project, did some trading around, and obtained a '87 5.0L engine. The only thing that's stock in it at this point is the crank, rods, and the block. All the rest is aftermarket and later model parts.
I do have a few suggestions, but take them with a grain of salt -
Removing the EGR can ultimately cause rich conditions, you might consider swapping to a later model computer from a non-EGR truck (88+). With aftermarket stuff, you might as well go with a 1990 MAF computer from a California Emissions Ranger (see MAF conversion in tech library). That is non-EGR as well, but adapts much better to changes.
Removing the cats only changed the sound, not much of a gain (if any), and it's not legal.
You've done all of that porting, but nothing is done internally to increase the demand for air.
A cam made a big improvement in the upper RPM bands in my experience.
I believe that you will need to modify the 2.9L block for the 4.0L counter weights on the crank shaft. This has been done apparently by Sven Pruett, which he indicated that the engine wasn't happy. I'd guess that you'd need custom made rods (probably another 600), but who knows if you couldn't find something that would work.
The only practical way (cost/feasibility/everything considered) of getting good power out of this motor is with forced induction or nitrous oxide.
I am a big fan of building engines like this, but N/A - $ vs hp = not good. You end up building something to make stock V8 power, when you could have just swapped in a V8, and have an engine in stock form to build up on. Depends on how you look at it...
Pete