Price filter returns wrong results - Price is stored as 0 instead of null and is set to special_price

It definitely looks like the price indexer is not working properly. I've checked it on Magento 2.2.6 vanilla and final_price, min_price and max_price have the same value as the price column.

The moment I change the price in admin all the values are changed (indexer set to on save). Maybe some extension is messing the indexer?

Without access to the code is hard to say but I would suggest to start debugging from

\Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice::prepareFinalPriceDataForType()

function - it is a function that prepares the final price data for certain product type. In this function you can find a call to getSelect() which generates an sql query for getting the data. Check if this function is called, maybe some extension is overriding it. If it's called check the data that the query gets. Good luck!