1) there are only practical limits.
If you gave me a single piece of code with 10,000 lines in it - I would reject it out of hand as a software developer. I would send you back to modularize it. To make it maintainable, understandable. I would never accept that.
When something gets into the thousands of lines of code, you need to rethink that design.
It is not a performance thing, it is a "that doesn't make sense" thing.
2) No, it isn't.
so, you trick us and you tell us this table that has in reality 1,000 rows has 1,000,000. We decide to full scan (for whatever reason). You love the performance (full scanning 1,000 rows doesn't take very long). In real life however, you might not be as impressed.
Testing against representative data sets (and user populations) is the only way you'll get a realistic sort of view of what will happen.
3) there are many issues with it. Your vendor has lied to you however, you can ALWAYS bind - there are no cases whereby they could not - none. They can fix this.
cursor sharing will negatively impact well written applications (longer code paths)
cursor sharing force can introduce bind peeking issues - especially when you MEANT to put a literal in the code.
cursor sharing changes your programs behavior - it just came up this morning in fact!
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:228614500346120336