You are adding items individually, each as a separate invoke call, which would very much slow down the UI. Rather, add as many items as you can in a single UI call. It may cause a temporary glitch, but will be much faster than a bunch of single calls.
Also, you are creating objects inside the UI call. If they aren't dependency objects, create them before you make the UI call to save some UI power as well.
Rule of thumb: do was much as you can outside the UI thread as you can, and only do work on the UI thread that has to be done on the UI thread (in your case, updating the ItemCollection).
Example:
var searchResult = Item.Search(_SearchText, _SearchLevelMin, _SearchLevelMax, _SearchRarity, _SearchType,_SearchRemoveUnavailable));
var compiledList = searchResult.Select(item => new ProfitItemViewModel(new ProfitItem(item))).ToArray();
Execute(() => {
foreach (Item item in compiledList)
{
ItemCollection.Add(item);
}
});
Also consider using DeferRefresh to speed up the adds like so:
Execute(() => {
using(ItemCollection.DeferRefresh()) {
foreach (Item item in compiledList)
{
ItemCollection.Add(item);
}
}
});