Currently only parts of the TCA are cached (ExtensionManagementUtility::loadBaseTca) which is the TCA defined in <ext>/Configuration/TCA/table_name.php but additions to TCA which are
added through API calls in ext_tables.php or TCA registered in the category API is always applied on every (backend) call.
To improve the performance in this area (ExtensionManagementUtility::addToAllTCATypes is a big performance issue which can be found in profiling) there should
be a possibility to cache a consistent state of the complete TCA making changes to it in ext_tables.php obsolete.
To achieve this a first step is to introduce a signal is introduced in ExtensionManagementUtility::buildBaseTcaFromSingleFiles
to make it possible to hook into the place where the base TCA is built. Changes and additions can be applied there.
A second step would be to make the core make use of this signal. The idea is that the core registers one slot which evaluates
files in every loaded extension that must only contain PHP code that deals with TCA changes (file name and location still has to be specified)
and move the code from core extensions in that location.
A third step would make the categorization API also use this signal.
Lastly we can cleanup all core extensions, that make use of <ext>/Configuration/TCA/table_name.php not only to introduce TCA
for new changes, but to extend/ overwrite it (filemetadata sysext does this for example) as these files are meant to become
a real configuration layer without any logic