The problem is that the completion for _ssh reads your entire config file line-by-line looking for Host directives each time you try to complete a host.
One solution would be to override the relevant function (_ssh_hosts) to do something faster (like cache host names in memory for subsequent completions).
Another would be to make your config file smaller by moving the actual configuration into separate files, leaving your config file as nothing but a list of Host/Include pairs. For example, turn
Host foo
    User bob
    IdentityFile ~/.ssh/bob_ident
Host bar
    User alice
    IdentityFile ~/.ssh/alice_ident
into
Host foo
    Include foo_config
Host bar
    Include bar_config
where ~/.ssh/foo_config and ~/.ssh/bar_config would contain the relevant details for each host.
Presumably, Host directives only make up a small fraction of your 7000+l lines, so this should speed up _ssh_host considerably.