The binary splitting is probably not a good idea, but you likely can improve link times by breaking the application up into several shared objects, and linking against those. When linking against a shared object, the linker doesn't have to actually copy the data into the executable, but only check that the shared object does define the needed symbols.
Still, 300 object files is not a lot, and shouldn't slow things down that much, ad least with a modern system, at least if they're on a local drive. (Back in the old days, when everything was on a remote drive, we used to set up our makefiles so that the link phase would run on the file server, rather than on our local machine. This could speed things up by a factor of 10 or more.)