You could do the folowing:
- select the notifications of type 'following', where read_status = 'not_read', LIMIT 2
- count the notifications of type 'following'
- select the notifications of type 'comment', where read_status = 'not_read', LIMIT 2
- count the notifications of type 'comment'
Whenever someone reads a notification, you set it to 'read'.
Whenever someone comments or follows something, you create a notification for all the related persons. Those persons are for example all the persons involved in a discussion, or just the person being replied to. Same thing for a comment.
This way, you are able to format and display this message without manipulating too much data. (You can probably pack those requests for more efficiency, but you get the idea)
User A, User B and 3 other started following you.
User A, User Z and 2 others commented on your post Super Duper.
I would say that changing your data structure for a problem like this is overkill. With this approach, you would be constantly redefining your data model, which will soon become a nightmare. The data model should reflect the big constraints of your application, not 'little" formatting problems like this one.