I think you are looking at the problem with much less experience than you think you are. Software is about more than just normalized relationships between tables. That is a very small corner of the Hundred Acre Wood.
If it were something else I would agree, but all the CB does is what we do and everyone had to do in 1E. Compare tables and do some math.
Show the proper data on the tab form the right tables for the previously selected choices.
The math doesn't even play into it until the character sheet is viewed and all totals tallied.
Many programmers make things more complex than they really are.
I say again someone pull out the wingdings and make a flow chart of this program and what little it really does have to do like all other character generators.
There are ones made with Javascript and text databases rather than this that can do the same thing with less. They only lack all the DDI data and new book data, but the functions are the same. Just because you have more data, does not change the function of the program.
This is where building the database and the tables with the proper structure come into play and why it would be just that easy to add a field to the rows of all data elements to state are they RPGA or not as a flag, and then add the filter to select only those when the filter is on, and display those. When the flag for RPGA is turned off, then it goes back and pulls all the data for a given thing: feat, race, class, etc; same as if you wanted only things form the PHB to be displayed.
You don't need a Rube Goldberg program just to add complexity to the code, when something more simple will work.
K.I.S.S.