Lets say we strip it all the way back to basics, the slowest part of this link is the communication, so lets keep him as small as possible with the cost of a small amount of shifting to get out the data you want.
You have 50 ADC modules, so a 7 bit identifier will cover all of them, + 12 bits of ADC value. ok, so 19 bits,
Now you want to send that in under 1uS, It would require at minimum a 18.2 Mbps data rate. (2.3MBps), This is about 5 times higher than what even the newer CANFD spec can accomplish,
So with normal CANbus, which should be 1Mb max, but if another poster thinks 500K, then 500K it is. to start no overhead, low level only. it would take 38uS to read 1 ADC value + Identifier, If you where very cluey, you could have every ADC board scrape the identifier and just fire off there value in turn, with the first ADC acting as the sync. costing only 24uS for each extra value. adding up to a grand total of 1.238 milliseconds for all 50 readings,
So now for alternatives if you really need it to be much faster, You have 3 UARTs, and an SPI that look like they can pull off cpu/2 and cpu/4, The SPI with a shift register for the chip select would be nice and fast. if cpu/2 works, you could read off all your boards in as little as 8uS + copying to RAM, or the more reasonable cpu/4 in 16uS, you set the SPI to read a 12 bit value, (its settable length), the shift register is used to load the first chip select, your ADC board is using the SPI register as a FIFO, so its ready to go, at max clock speed, 12 bits are pulled through, stored somewhere and the chip select shift register is clocked 1 pulse to select the second ADC and so on.