Hi Matt, if you use the shapefile provider overload that takes the fileBasedIndex overload you will get a bit of extra performance - you wouldnt need to write a custom provider.
You can use shapefiles of any size (subject to hardware) but clearly if you are rendering 150Mb of actual geometric data (rather than reading attribute data in the dbf file) performance is likely to be pretty sub standard.
You can can put the data into a db, most of my work is db based, but it is up to you - many people leave it in shapefiles..
There shouldn't be locking issues with the 0.9 provider - You may have issues with later ones which are read/write..
At lower zoom levels you could (and possibly should if you have such a lot of geometric data) use the MinVisible/MaxVisible properties to enable and disable different layers at different levels of generalization.