Depending on the segment current needed, it may be possible to provide for both CA and CC parts (but not mixed) without using any transistors. The choice of CA or CC would be set in software.
You would set up the 8 segment drivers just as you have them, but the CA or CC pins would be driven by GPIO pins with only a current-limiting resistor. The key to making this work is to multiplex by segment instead of by digit.
In traditional multiplexing, each segment driver provides current to only one segment at any one time, but the CA or CC pin must source or sink current for as many as 8 segments including the DP - hence the need for the transistor.
But if you multiplex by segment, each segment driver must supply a maximum of 4 segments at one time, but the CA or CC sources or sinks current for only one segment at a time, and therefore needs no transistor, just a resistor. The question is whether a PIC can drive 4 segments at once, and that depends on how efficient your displays are. But it appears the absolute maximum rating for GPIO pins for the PIC is 50ma, so if you can use 10ma per segment or less, this may work.
You would have to refresh twice as often as the traditional method because each segment is ON only 1/8 of the time versus 1/4 of the time when multiplexing by digit, and this will make the digits appear a bit dimmer. But your software would define what GPIO state is "ON" for both the segment lines and the CA/CC lines. They would just be opposites for CA and CC parts. It's even possible that your software could autodetect which displays are being used (I had no luck finding a way to do that, but perhaps your high-voltage-drop parts would provide a way.)
This is all explained in detail in this video and the related Github repo.