If you use CommonWare's MergeAdapter it should be quite simple to achieve your desired result.
It will take multiple lists (and you can add individual views as well, so your empty lines can be inserted) and put them all together to be used in your list.
Here is a link to an answer I recently gave giving a more in depth explanation of how to use the MergeAdapter.
EDIT
It sounds like your query with the UNION and JOIN is giving you duplicate results in the cursor. Try separating them into two separate cursors. Then create two list adapters, and your two empty views, and add that all into the mergeadapter and set it to your listview.
lv = (ListView) v.findViewById(android.R.id.mergelist);
Cursor c1 = db.fetchCursor1();
String[] from1 = new String[] { DB.ITEM_1 };
int[] to1 = new int[] { R.id.ListItem1 };
SimpleCursorAdapter ca1 = new SimpleCursorAdapter(getActivity(),
R.layout.your_layout, c1, from1, to1);
Cursor c2 = db.fetchCursor2();
String[] from2 = new String[] { DB.ITEM_1 };
int[] to2 = new int[] { R.id.ListItem1 };
SimpleCursorAdapter ca2 = new SimpleCursorAdapter(getActivity(),
R.layout.your_layout, c2, from2, to2);
View Blank1 = getLayoutInflater.inflate(R.layout.blank);
View Blank2 = getLayoutInflater.inflate(R.layout.blank);
myMergeAdapter = new MergeAdapter();
myMergeAdapter.addAdapter(ca1);
myMergeAdapter.addView(Blank1);
myMergeAdapter.addView(Blank2);
myMergeAdapter.addAdapter(ca2);
lv.setAdapter(myMergeAdapter);