Since file descriptors are ints then you obviously can't go above 4G file descriptors. This is true even on 64-bit systems because sizeof(int) is still 4. In theory you could open more file descriptors across multiple processes. Even if you increase all the /proc limits you're likely to run out of kernel memory first.
Per-socket allocations in the linux kernel are in the kilobyte range so even on big servers (with many GB of ram) the maximum connection count is measured in millions, not billions.