Help with optimising a sql query on two partitioned tables
Without query execution plan, my first thoughts are:

I. Use datetime variables to remove implicit convertion and use index.

DECLARE @day as datetime2(2) = '20141007'
DECLARE @dayStart as datetime2(2) = CONCAT(@day,' 00:00:00.000')
DECLARE @dayEnd as datetime2(2) = CONCAT(@day,' 23:59:59.999')


II. Change EXISTS for INNER JOIN

EXISTS (Select * FROM Acks AS B where (A.messageId = B.messageId)


to 

INNER JOIN ON A.messageId = B.messageId


III. Consider limiting table B on date - at the moment it looks through whole table.

UPDATE.
1. Do parts of your join work much faster as single queries?
2. Please include both Execution Plans on your post. Links may stop working in future.