It seems that your approach is good enough. The only thing that bothers me is the LINQ that you are using to take the localized column values. Maybe you could try to use sql views or stored procedure to execute this faster.
In case you are using fluent mapping, you could try to use dictionaries to store the localization. It will be faster and easier to search for localized values. Here
you can find more information about mapping Dictionaries.
I hope that helps.
OpenAccess ORM is now Telerik Data Access
. For more information on the new names, please, check out the Telerik Product Map