As @wooncheck said, what you want is private messaging, not IM.
I thought about it and it seems quiet complicated to implement in Orchard, but here is a link with a table schema to explain how you could design it :
TL;DR : You need 3 content types (User, Message, Folder) and one relationship table (User_Message_Folder with columns UserId, MessageId, FolderId, IsRead and DateCreated)
Folders are typically the sames that you find in an email client : Inbox, Sent items, Deleted items, Drafts.
With that kind of architecture, you would be able to create a message and to affect it in the 'Sent items' folder for the sender and in the 'Inbox' folder for each recipient.
Then, you should make a PrivateMessagingService with some methods like :
List<MessageDetails> GetMessagesByUserFolder(int userId, int folderId, bool? isRead)
--> a MessageDetails is an object that has the properties of a Message and of the relationship table (IsRead, DateCreated, ...)
void MoveMessageToUserFolder(int messageId, int userId, int folderId)
SetMessageAsReadInUserFolder(int messageId, int userId, int folderId, bool read) --> to specify if a message is read or not
List<User> GetUsersByMessage(int messageId) --> to get the recipients of a Message
List<Folder> GetFolders() --> an further enhancement will be to have global folders and then additionnal folders by users.
With this, you would be able to make a 'web mail like UI' that allows to display folders, messages by folder and to set them as read.
The create message and the message details would be the Edit and Details views but it would need a specific Editor and Display shape to add recipient (autocomplete with username or user list ?) or display the recipient ('To' : comma separated list of
usernames ? ).