ENH: Add nullable keyword to read_sql
Sits on top of #50047 

Functionality wise, this should work now.

More broadly, I am not sure that this is the best approach we could take here. Since the ``convert_to_nullable_type`` in ``lib.maybe_convert_objects`` is not used right now except here, we could also make this strict and return the appropriate Array from the Cython code, not only when nulls are present. This would avoid the re-cast in the non-cython code part.
I think makes sense and like your vision on the interaction with Cython. Is there any performance difference here moving away from the `.from_records` construction of the DataFrame? Also discussed this with @mroeschke in another pr, he leaned more towards keeping maybe_convert_objects as is.

Maybe a bit faster? The previous implementation was running through the same function that we are calling directly now. Definitively no slowdown >  Since the convert_to_nullable_type in lib.maybe_convert_objects is not used right now except here, we could also make this strict and return the appropriate Array from the Cython code, not only when nulls are present

I think in a future PR it might make sense to do this; I didn't realized this was the only location where this is used. I guess the only slight downside is run time importing the Arrays in the Cython code? Thanks @phofl 