I too found the behavior of visibility cycling via <TAB> to be a little annoying. What frustrated me was that pressing <TAB> a third time throws a tonne of text (assuming you have a reasonable amount of text) at the buffer. Recently I started using some other visibility commands like show-children (C-c <TAB>) and show-branches (C-c C-k).
For example, I use org-capture+datetree when taking notes and can have months worth of information in an org buffer. I like to use '2 C-c <TAB>' when situated on a month headline to show me all of the top level headings for each day in that month. It gives me a nice overview of what I have been doing for the month.
With regard to your second issue, you can control this behavior with the org-cycle-separator-lines variable. By default, leaving two blank lines will make org leave a space in your outline when folding.
For example, I use org-capture+datetree when taking notes and can have months worth of information in an org buffer. I like to use '2 C-c <TAB>' when situated on a month headline to show me all of the top level headings for each day in that month. It gives me a nice overview of what I have been doing for the month.
With regard to your second issue, you can control this behavior with the org-cycle-separator-lines variable. By default, leaving two blank lines will make org leave a space in your outline when folding.