Today's linking from posts/pages to other internal pages, posts, categories, custom post types ... is stupid - you have to first look for the actual URL, click anchor, and type the URL. The URL is then absolute, it cannot be changed (easily for all articles, e.g. when you change the url schema, domain etc.) , it cannot be managed by filters etc.
There are some ideas here with similar needs, mostly with 5 stars, but this one is going to more depth. Sometimes they are commented that this is plugin area, but i strongly disagree - this should be global wordpress function - same should be not only for linking in creation of anchors, but also for links created when placing image with anchor, for links in Links etc.
My idea: When you click [A]nchor button in TinyMCE, there would be
a) plain inputbox as today
b) Select box with all Pages
c) Other select boxes for other custom post types if allowed in them
d) search box with ajax, which would search all Posts, Pages and custom post types
e) Select boxes with categories, tags ....
If you e.g. select some page, it would not insert it's actual page, but it could do one of theese
a) put there relative permalink (?p=1 for page with ID 1, c=1 for category with with ID 1 etc.)
b) put there some shortcode, e.g. [p=1]
c) some special code in anchor class, e.g. class="internal-link-page-1"
Theese permalinks/shortcodes/etc. would be then examined and replaced for their actual address (with some options e.g. if to show relative/absolute).
There need to be caching, so the database should be not examined for every link on every post/page on every request, but the actual link should be somehow saved and rebuilded for whole database only on request (e.g. on permalink structure change).