Yes, first off, never ever store monetary values as float, a float is not exact. You should use either an int and multiply the price so you don't get any decimal points (3.60 * 100 = 360) or store it as decimal which is an exact value.
What the hell is tupdated_at ?
Now to business.
Write the word EXPLAIN in front of the select.
It will tell you what takes time and, most likely that you should add indexes to product_id, size and price.
You should probably do the joins before any filters
select
`pw_id`,
`price`,
`prices`.`webshop_id`,
`last_update`
from
prices,
(
select
webshop_id,
max(tupdated_at) as last_update
from
prices
where
product_id = 3
and size = 50
GROUP BY
webshop_id
) last_updates
where
`prices`.`webshop_id` = `last_updates`.`webshop_id`
and `prices`.`tupdated_at` = `last_updates`.`last_update`
and `prices`.`product_id` = 3
and `prices`.`size` = 50
order by
`price` asc